如何用字符数组跟字符指针实现函数strcat(s,t),返回字符串的首地址我刚学的c语言,对于指针跟数组都不是很熟悉 —— 希望高手指点!~
#include
using namespace std;
char* solve(char *s, char *t)
{
char* c = (char*)malloc(sizeof(s)+sizeof(t)+1);
int i=0,j=0;
for (i=0; s[i]!='\0'; i++) c[i] = s[i];
for (j=0; t[j]!='\0'; i++,j++) c[i] = t[j];
c[i] = '\0';
return c;
}
int main()
{
char s[] = "123";
char t[] = "45678";
char* x = solve(s,t);
cout<<x<<endl;
return 0;
}。
。
指针和数组是完全不一样的两个东西。数组是给一个连续空间取了一个名字而已,它在进行值传递的时候传的是首元素地址,所以很多人把它和指针混起来;指针则表示其指向了某个特定类型的空间。
例子1。
int a[2];printf("%d\t%d",sizeof(a)/sizeof(int),sizeof(a+1)/sizeof(int));
第一个sizeof(a)计算出了数组a的空间长度为2;第二个sizeof(a+1)则是计算数组a的首地址+1所在元素空间的长度为1。
例子2。
用指针开辟二维数组需要:
int **a;
a=new int *[2]; //a指向指针数组
a[0]=new int [2];a[1]=new int[2];//为他们开辟空间
易错的地方:
void f(int **t);
然后其他函数中
{
int a[2][2];
f(a);
}//错在a是数组,t是指向指针的指针,根本不是一个东西。
相信你懂得。
字符数组和字符指针是有区别的,例如
char *str1, str2[10];
printf("sizeof str1:%d, sizeof str2 %d\n",
sizeof(str1), sizeof(str2));
打印的结果是
sizeof str1:4, sizeof str2:10
str1 = str2;这个赋值语句是没有问题的,因为str1是变量
而str2 = str1;就会有问题,因为字符数组的数组名是一个常量(地址常量),不能赋值
至于实现strcat,下面给你一个经典的实现方法
char *strcat(char *dest, const char *src)
{
if (dest == NULL || src == NULL)
return NULL; //这里出错不处理了
char *ptr = dest + strlen(dest);
while (*ptr++ = *src++)
; //空语句
return dest;
}。
。
在本质上讲,字符数组跟字符指针都是指针,可以统一处理