语句{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”吗?为什么?
展开
6个回答
展开全部
不一定,多数情况下不会正确输出字符串。
由于没有分配空间,且指针s的值未知,所以,向一个不属于空间写入数据后,结果未知,多数情况下会崩溃......系统一般不会向别人的内存空间乱写的,当然不排除运气好的时候。
scanf函数和getchar函数在输入时是读取到“回车”就结束的,而回bai车符留在了输入流缓冲区,当下一次输入仍用scanf或者getchar读入一个字符的时候,则会把缓冲区的回车符读取从而导致结果不正确,但若第二次是用scanf输入一个数字的时候,scanf则会跳过空白字符,可以正常输入。
扩展资料:
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
参考资料来源:百度百科-字符串
展开全部
楼上已经说的很清楚了,这段代码存在向未知内存空间写数据的问题,运气好不会导致程序崩溃,你用的TC没有崩溃,说明你运气好。不要再问为什么没出错了,钻牛角尖不等于求知
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不一定,多数情况下不会正确输出字符串
由于没有分配空间,且指针s的值未知,所以,向一个不属于你的空间写入数据后,结果未知,多数情况下会崩溃......系统一般不会让你向别人的内存空间乱写的,当然不排除运气好的时候
由于没有分配空间,且指针s的值未知,所以,向一个不属于你的空间写入数据后,结果未知,多数情况下会崩溃......系统一般不会让你向别人的内存空间乱写的,当然不排除运气好的时候
更多追问追答
追问
但在TC运行可以过啊。
追答
你说的过是什么意思?编译通过?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
恩恩...
你只是声明s为char *型(指针型)变量,
并没有告诉系统你要使用这个s变量所指的和它之后的地址
所以说应该加一句:
s=(char *)malloc(1001);//表示申请一段可存储1000子节的字符数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为并没有给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;
}
通过第五行分配内存,这样就行了~
#include<stdio.h>
#include<malloc.h>
int main()
{
char *s;
s=(char*)malloc(sizeof(char));
scanf("%s",s);
printf("%s\n",s);
return 0;
}
通过第五行分配内存,这样就行了~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询