char des[3];
char *p = des,*src = “Hello world\n”;
while (*p++ = *src++); puts(des);
while ( (*p)++ = (*src)++);
这俩语句有什么问题?尤其是第一个
char des[3];
char *p = des,*src = “Hello world\n”;
while (*p++ = *src++); puts(des);
while ( (*p)++ = (*src)++);
这俩语句有什么问题?尤其是第一个
char *p = des就是让p指向des数组的首地址。
*src = “Hello world\n” src是指向 常量字符串的指针
while (*p++ = *src++);这句话是吧src的字符串赋值给p(也就是des),问题是没有判断是否超出数组的范围。
因为des只有3给字符大小,所以,在赋值时,只能赋值2个,留一个给0,以便字符串能正常结束。当前的代码会给超出数组范围。
可以改成:
char des[3]={0};
int i =0;
while(i++<3 && *p++ = *src++);
while ( (*p)++ = (*src)++);这句话中,*p和*src都是一个字符,++对字符起作用,而不是对地址起作用,会死循环。