补充一个基础问题
char acX[]="abc";
char acY[]={'a','b','c'};
char *szX="abc";
char *szY="abc";
这四个字符串有区别
acx,acy内存分配在堆上,是两个不同的字符串,前者最后一位是’\0’,后者最后没有’\0’
szx,szy都是指针,指向同一块内存,这块内存就是文字常量“abc”(这个最后也有’0’,该内存分配在静态存储区,不可被修改,默认只有可读属性
strcpy(char ,const char)函数
char *strcpy(char *str, char *s)
{
if (str == NULL || s == NULL)
return NULL;
char *strcopy = str;
while ((*strcopy++ = *s++) != '\0');
return strcopy;
}
大的字符串不可以拷贝到小的字符串,小的字符串拷贝到大的字符串以后大小不变。
memcpy函数
void* memcpy(void* m, void* t, size_t size)
{
assert((m != NULL && t != NULL));
char* sm = (char*)m;
char* st = (char*)t;
while (size--)
*sm++ = *st++;
return sm;
}
区别:
1.strcpy不能限定拷贝的长度,而memcpy可以
2.strcpy只能拷贝字符串,而memcpy不仅仅可以拷贝字符串
**学到的一个小tip,常量和变量比较时候常量写在前面。
比如 NULL==x比x==NULL好
因为后者如果==写成=号时,不会报错,而前者会,恰好这个失误是比较从常见的失误。**