免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2501 | 回复: 11

关于linux和win中的scanf(); [复制链接]

论坛徽章:
0
发表于 2007-03-12 15:10 |显示全部楼层
程序段:
void main()
{
          char *str;
         
          scanf("%s",str);
          printf("string is: %s\n",str);
}

在win中用tc2调试,可以通过,并且显示正常。
怎么在linux中调试过,但是运行出问题。
显示:
     segmentation fault.
难道linux和win中的scanf()用法不一样?
还是我哪里写错了?
请指教。
ps:如果能截图发上来就好了

论坛徽章:
0
发表于 2007-03-12 15:11 |显示全部楼层
因为指针并没有指向一个空间

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2007-03-12 15:11 |显示全部楼层
晕,这个问题昨天回答过,今天又来了。
str指向何方?
用指针心中随时要牢记,它指向哪里?!

论坛徽章:
0
发表于 2007-03-12 15:13 |显示全部楼层
指针需要你手动给它分配空间,并手动指向该空间

如果没有,指针指向哪里,是不确定的

也就是说,你scanf得到的数据存放到哪里是不一定的

因此,偶尔有运行正常是你运气好

错误才是正常的

论坛徽章:
0
发表于 2007-03-12 15:14 |显示全部楼层
那为何win中 可以过而linux不过呢?
比如输入:123

论坛徽章:
0
发表于 2007-03-12 15:16 |显示全部楼层
那能不能给个正确的代码?
初始化的时候,应该怎么做?

谢谢了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2007-03-12 15:17 |显示全部楼层
原帖由 ziyiu123 于 2007-3-12 15:14 发表
那为何win中 可以过而linux不过呢?
比如输入:123

请弄清楚在win下运行正常就能证明程序正确吗?

论坛徽章:
0
发表于 2007-03-12 15:21 |显示全部楼层
呵呵,我只是问问有什么不一样,或者可以的话,给一份正确的代码,我没有肯定win也没有否定linux.只是想知道同一段程序为什么会有差异。
谢谢。

论坛徽章:
0
发表于 2007-03-12 15:28 |显示全部楼层
第一、Win下不是正常,是你运气好。也许你再运行一次,或者重启一下就不正常了。
正确的代码应该如下

char *str=NULL;
str=malloc(128*sizeof(char) );
sscanf( "%s\n", str );

  1. char *str=NULL;
  2. str=malloc(128*sizeof(char) );
  3. sscanf( "%s\n", str );
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2007-03-12 15:28 |显示全部楼层
原帖由 ziyiu123 于 2007-3-12 15:21 发表
呵呵,我只是问问有什么不一样,或者可以的话,给一份正确的代码,我没有肯定win也没有否定linux.只是想知道同一段程序为什么会有差异。
谢谢。

错误给你指出了,
这时你就应该自己尝试着去解决问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP