今天编程的时候遇到一个问题,以前没有遇到过,做个记录:下面是我写的一个小的测试程序
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = "abcASJSJJ";
char *dst = "bc";
printf("%p %c\n", dst, *dst);
/* while(*dst != '\0'){ */
/* printf("%c\n", *dst); */
/* dst++; */
/* } */
while((*dst++) != '\0'){
printf("1\n");
}
printf("%c\n", *dst);
printf("%p\n", &dst[0]);
printf("%p\n", &dst[2]);
printf("%p %c\n", dst, *dst);
if(*dst == '\0')
printf("true\n");
else
printf("false\n");
return 0;
}
注意上面的while循环,我的预期是要输出true。你觉得会输出什么呢?
运行结果:
结果是false,而且为什么最后*dst不是'\0',而是个随机字符呢。还有首地址已经改变了
通过gdb调试,主要原因就在于while循环那一句,dst++执行了三次,dst已经指向了字符串'\0'的下一个字符,是一个
没有定义的内存,值是随机的。
修改方法就是替换成代码中注释的部分。就可以得到预期的结果了。当然dst的地址都改变了,如果想dst还指向原字符串首部,
需要一个临时变量保存该地址。