一、字符数组、字符串、字符串指针的区别,以及sizeof和strlen的区别
1、sizeof(字符串)有包含‘\0’,而strlen(字符串)不包含'\0'。
2、sizeof()对这3种定义的区别在下面的小代码中。
3、strlen()对这3种定义的结果都是一样的。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[10] = "123456";
char b[] = "123456";
char *c = "123456";
printf("sizeof(a): %ld\n",sizeof(a));
printf("sizeof(b): %ld\n",sizeof(b));
printf("sizeof(c): %ld\n",sizeof(c));
printf("strlen(a): %ld\n",strlen(a));
printf("strlen(b): %ld\n",strlen(b));
printf("strlen(c): %ld\n",strlen(c));
return 0;
}
运行结果:
小结:sizeof()结果不一样的原因:
1、a和b都是字符数组,a的大小在赋值之前就确定了,b的大小是根据后面的字符串大小加上那个‘\0’组成的。
2、c是字符指针,跟数组有点差别,我的环境是64位的,所以指针大小也是64位,sizeof( c ) = 8。
额外记录关于malloc的一点,字符数组不能用(char *)malloc(num)来申请空间,因为字符数组的空间在定义的时候已经确定了,无法再次修改。而字符指针可以。
二、重写strcpy()函数。
char* strcpy(char* Desk, const char* Src)
{
char *p = Desk; //Desk用于返回
if(NULL == Desk || NULL == Src)
return -1;
while((*p++ = *Src++) != '\0');
return Desk;
}
想到其他题再补充》