语句{char *s;scanf("%s",s);puts(s);} /*假设执行时输入ABCDE<回车>*/ 可以正确输出字符串“ABCDE”吗?

语句{char*s;scanf("%s",s);puts(s);}/*假设执行时输入ABCDE<回车>*/可以正确输出字符串“ABCDE”吗?为什么?... 语句{char *s;scanf("%s",s);puts(s);} /*假设执行时输入ABCDE<回车>*/ 可以正确输出字符串“ABCDE”吗?为什么? 展开
 我来答
帐号已注销
2020-12-31 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:159万
展开全部

不一定,多数情况下不会正确输出字符串

由于没有分配空间,且指针s的值未知,所以,向一个不属于空间写入数据后,结果未知,多数情况下会崩溃......系统一般不会向别人的内存空间乱写的,当然不排除运气好的时候。

scanf函数和getchar函数在输入时是读取到“回车”就结束的,而回bai车符留在了输入流缓冲区,当下一次输入仍用scanf或者getchar读入一个字符的时候,则会把缓冲区的回车符读取从而导致结果不正确,但若第二次是用scanf输入一个数字的时候,scanf则会跳过空白字符,可以正常输入。

扩展资料:

通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

参考资料来源:百度百科-字符串

忘至白葬不情必0T
2011-12-18 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
楼上已经说的很清楚了,这段代码存在向未知内存空间写数据的问题,运气好不会导致程序崩溃,你用的TC没有崩溃,说明你运气好。不要再问为什么没出错了,钻牛角尖不等于求知
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戴静柏0Ep
2011-12-18 · TA获得超过1796个赞
知道小有建树答主
回答量:426
采纳率:0%
帮助的人:772万
展开全部
不一定,多数情况下不会正确输出字符串
由于没有分配空间,且指针s的值未知,所以,向一个不属于你的空间写入数据后,结果未知,多数情况下会崩溃......系统一般不会让你向别人的内存空间乱写的,当然不排除运气好的时候
更多追问追答
追问
但在TC运行可以过啊。
追答
你说的过是什么意思?编译通过?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimmyddt1
2011-12-18 · 超过18用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:47.2万
展开全部
恩恩... 你只是声明s为char *型(指针型)变量, 并没有告诉系统你要使用这个s变量所指的和它之后的地址 所以说应该加一句: s=(char *)malloc(1001);//表示申请一段可存储1000子节的字符数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
邪宇尊
2012-09-10
知道答主
回答量:10
采纳率:0%
帮助的人:10.9万
展开全部
因为并没有给s分配内存,虽然没有语法的错误,但并不能得到想要的结果
#include<stdio.h>
#include<malloc.h>
int main()
{
char *s;
s=(char*)malloc(sizeof(char));
scanf("%s",s);
printf("%s\n",s);
return 0;
}
通过第五行分配内存,这样就行了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式