首页 新闻 会员 周边

C语言中的段错误问题请教

0
[已解决问题] 解决于 2013-04-29 01:09

今天写了一个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,结果就能正确执行,请问这是什么原因呢?为什么加了一个换行就不会出错了?

catcher24的主页 catcher24 | 菜鸟二级 | 园豆:202
提问于:2013-03-19 02:10
< >
分享
最佳答案
0
char *ptr;指针没有初始化,是个野指针。
建议多看看《编写高质量代码:改善C++程序的150个建议》
奖励园豆:5
heyilong | 菜鸟二级 |园豆:207 | 2013-03-19 09:29

谢谢你推荐的书,初始化指针后两个都出现错误了。只是第二个程序为什么没有报错呢?

catcher24 | 园豆:202 (菜鸟二级) | 2013-03-19 11:54
其他回答(3)
0

第二段你都main方法中没有()

伏草惟存 | 园豆:1420 (小虾三级) | 2013-03-19 07:49

写到网上的时候忘了,已更正。

支持(0) 反对(0) catcher24 | 园豆:202 (菜鸟二级) | 2013-03-19 11:50
0

char *ptr未初始化

LastPc | 园豆:225 (菜鸟二级) | 2013-03-19 09:30

初始化指针后两个都出现错误了。只是第二个程序为什么没有报错呢?

支持(0) 反对(0) catcher24 | 园豆:202 (菜鸟二级) | 2013-03-19 11:55
0

未初始化的变量是随机地址,可能指向允许访问的内存。一般初始化为null,会报错。C语言一定要严格使用内存。

jinhuawang76 | 园豆:303 (菜鸟二级) | 2013-03-19 22:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册