烫烫烫烫烫烫烫烫烫烫?C语言求解小问题

mko_y 2012-03-07 09:10:57
程序1:

# include <stdio.h>
int main(void)
{
char str1[20],str2[20];
scanf("str1==%s",str1);
printf("%s\n",str1);
scanf("%s",str2);
printf("str2==%s\n",str2);
return 0;
}


===================
输入:
hello world
==============

输出:
=======

hello world
烫烫烫烫烫烫烫烫烫烫?
str2==hello
Press any key to continue

===========


程序2:

# include <stdio.h>
int main(void)
{
char str1[20],str2[20];
scanf("%s",str1);
printf("%s\n",str1);
scanf("%s",str2);
printf("str2==%s\n",str2);
return 0;
}


输入:
===========
hello world
===========

输出:
=======
hello world
hello
str2==world
Press any key to continue
===========

求解?
...全文
677 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
mko_y 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 fcmsuck 的回复:]

这个帖子,只有20楼回复的有经验含量,你可以仔细看看
[/Quote]

是的,我菜鸟...看不懂。。。。
mko_y 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wtbike 的回复:]

引用 26 楼 fcmsuck 的回复:

哎,我不在乎分,但是看到楼主分不清楚真正原因,帖子算是白发了

我特地用楼主的程序一试了一下
char str1[20],str2[20];
scanf("str1==%s",str1);
发现只有在输入内容为"str1==aaaa"的时候,会把输入的内容"aaaa"读入到str1中,这里的"aaaa"可以替换成别的数据.
所以,即……
[/Quote]

呃。。。最后一个所以没听懂
wtbike 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 fcmsuck 的回复:]

哎,我不在乎分,但是看到楼主分不清楚真正原因,帖子算是白发了
[/Quote]
我特地用楼主的程序一试了一下
char str1[20],str2[20];
scanf("str1==%s",str1);
发现只有在输入内容为"str1==aaaa"的时候,会把输入的内容"aaaa"读入到str1中,这里的"aaaa"可以替换成别的数据.
所以,即使这里str1做了初始化的处理,仍然得不到楼主想要的输入的内容,输出结果会为空.
所以,输出内容为烫,表面是因为没有初始化,但本质上仍然是获取输入内容的时候有误.
  • 打赏
  • 举报
回复
哎,我不在乎分,但是看到楼主分不清楚真正原因,帖子算是白发了
  • 打赏
  • 举报
回复
这个帖子,只有20楼回复的有经验含量,你可以仔细看看
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mko_y 的回复:]

引用 11 楼 fcmsuck 的回复:

烫烫烫烫烫烫烫烫烫烫
屯屯屯屯屯屯屯屯屯屯

说白了,未初始化,脏内存


。。不是吧,你说的不对的。。
[/Quote]
?????
luciferisnotsatan 2012-03-08
  • 打赏
  • 举报
回复
debug下,未初始化,栈空间,用0xcc填充,堆空间,用0xcd填充
啊kun 2012-03-08
  • 打赏
  • 举报
回复
曾遇到过,但未细细分析 学习了。
zqt520 2012-03-08
  • 打赏
  • 举报
回复
不错,以前还真没这么用过!唉!
qixing1115 2012-03-08
  • 打赏
  • 举报
回复
# include <stdio.h>
int main(void)
{
char str1[20],str2[20];
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
scanf("%s",str1);
printf("%s\n",str1);
scanf("%s",str2);
printf("str2==%s\n",str2);
return 0;
}
赵4老师 2012-03-08
  • 打赏
  • 举报
回复
fgets(str1,20,stdin);
if ('\n'==str1[strlen(str1)-1]) str1[strlen(str1)-1]=0;



wtbike 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 may_gi 的回复:]

scanf("str1==%s",str1;的意思是输入以"str1"开头的字符串并把后面的字符串保存到str1中,例如输入:str1abcd则会把abcd输入到后面的str1中,而不是楼主想的在输入的字符之前加上str1,所以输入hello会出错的。
[/Quote]

学习了~
善良超锅锅 2012-03-08
  • 打赏
  • 举报
回复
++1
[Quote=引用 8 楼 cfjtaishan 的回复:]

测试了一下你的程序,这个问题是scanf();的问题。你的写法是:scanf("str1==%s",str1);那么你的输入也需是:str1==helloworld。这样就不会有问题了。所以你在scanf();输入时,第一个参数中尽量不要加入像'\n',' '等这些字符,如果加了你在输入时必须要加,但是如果你加了'\n',即使你在最后也加了也不行。你的scanf();第一参数是str1==%s那……
[/Quote]
muyi66 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anyidan 的回复:]

引用 5 楼 may_gi 的回复:
scanf("str1==%s",str1;的意思是输入以"str1"开头的字符串并把后面的字符串保存到str1中,例如输入:str1abcd则会把abcd输入到后面的str1中,而不是楼主想的在输入的字符之前加上str1,所以输入hello会出错的。


大哥您确定吗?我第一次听说,以前只会这样用

scanf("%s",str1);
[/Quote]试验过了,还真是这样的。
  • 打赏
  • 举报
回复
烫烫烫烫烫烫烫烫烫烫
屯屯屯屯屯屯屯屯屯屯

说白了,未初始化,脏内存
mko_y 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 qixing1115 的回复:]

C/C++ code
# include <stdio.h>
int main(void)
{
char str1[20],str2[20];
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
scanf("%s",str1);
printf("%s\n",str1);
scanf……
[/Quote]

你好,使用vc++6.0运行你程序哦。
问题在MEMSET 这里,出现提示
=======
error C2065: 'memset' : undeclared identifier
mko_y 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fcmsuck 的回复:]

烫烫烫烫烫烫烫烫烫烫
屯屯屯屯屯屯屯屯屯屯

说白了,未初始化,脏内存
[/Quote]

。。不是吧,你说的不对的。。
mko_y 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 may_gi 的回复:]

scanf("str1==%s",str1;的意思是输入以"str1"开头的字符串并把后面的字符串保存到str1中,例如输入:str1abcd则会把abcd输入到后面的str1中,而不是楼主想的在输入的字符之前加上str1,所以输入hello会出错的。
[/Quote]

按照你说的,输入str1abcd
然后运行结果是:
=====================
str1abcd
str1==烫烫烫烫烫烫烫烫烫烫?
str2==abcd
Press any key to continue
=======================


求大家继续赐教谢谢
冷兔 2012-03-07
  • 打赏
  • 举报
回复
scanf括号里的""里的东西表示你输入的格式,所以第一个scanf你输入时应该输 str1== 外加你想要输入的字符串。
狂且 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anyidan 的回复:]

引用 5 楼 may_gi 的回复:
scanf("str1==%s",str1;的意思是输入以"str1"开头的字符串并把后面的字符串保存到str1中,例如输入:str1abcd则会把abcd输入到后面的str1中,而不是楼主想的在输入的字符之前加上str1,所以输入hello会出错的。


大哥您确定吗?我第一次听说,以前只会这样用

scanf("%s",str1);
[/Quote]
楼主好好看书了么? 表示没看/用过啊?
加载更多回复(8)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧