今天写了一个C程序发现很奇怪的问题,下面是代码:
#include <stdio.h> int main() { char *ptr; scanf("%s",ptr); printf("%s",ptr);
return 0; }
然后用gcc test.c -o test
输入nanjing,然后程序说出了段错误(核心已转储)
然后我又在上述的程序中做了略微的修改,如下:
#include <stdio.h> int main() { char *ptr; scanf("%s",ptr); printf("%s\n",ptr); return 0; }
再次编译运行,输入:nanjing,结果就能正确执行,请问这是什么原因呢?为什么加了一个换行就不会出错了?
char *ptr;指针没有初始化,是个野指针。
建议多看看《编写高质量代码:改善C++程序的150个建议》
谢谢你推荐的书,初始化指针后两个都出现错误了。只是第二个程序为什么没有报错呢?
第二段你都main方法中没有()
写到网上的时候忘了,已更正。
char *ptr未初始化
初始化指针后两个都出现错误了。只是第二个程序为什么没有报错呢?
未初始化的变量是随机地址,可能指向允许访问的内存。一般初始化为null,会报错。C语言一定要严格使用内存。