关于C语言函数strcat的问题
char *strcat(char *s, char *t){char *q = s;
printf("q = %p\t*q = %c\ns = %p\t*s = %c\n", q, *q, s, *s);//指针赋值之前分别打印q, *q, s, *s的值
while (*s)
s++;
while (*s++ = *t++)
;
printf("q = %p\t*q = %c\ns = %p\t*s = %c\n", q, *q, s, *s);//指针赋值之后分别打印q, *q, s, *s的值
return q;
}
然后运行:
int main(){
char str[] = "123\0";
char str2[] = "abc\0";
strcat(str, str2);
return 0;
}
运行结果:
q = 0019FC1C *q = 1
s = 0019FC1C *s = 1
q = 0019FC1C *q = 1
s = 0019FC2C *s = //此处为空字符
所以,根据结果,指针q指向的地址始终为s第一个字符的内存地址,并且*q始终等于s的第一个字符
但是,将打印语句去掉,即写成:
char *strcat(char *s, char *t){
char *q = s;
while (*s)
s++;
while (*s++ = *t++)
;
return q;
}
然后调用函数:
int main(){
char str[] = "123\0";
char str2[] = "abc\0";
printf("%s\n", strcat(str, str2));
return 0;
}
运行结果:123abc
所以我不明白的是:
既然函数strcat的返回值是q,调用函数以后,
为什么结果不是等于s的第一个字符,而是返回两个字符串连接后的新字符串?