永发信息网

啊,谁能告诉我,为什么定义一个char a[10],就能用 gets(a)输入,但是定义一个c

答案:2  悬赏:50  手机版
解决时间 2021-03-27 01:06
  • 提问者网友:星軌
  • 2021-03-26 17:48
啊,谁能告诉我,为什么定义一个char a[10],就能用 gets(a)输入,但是定义一个c
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-03-26 18:24
#include
#include
int main()
{
char *p =(char*)malloc(sizeof(char)*10);
gets(p);
printf("%s \n", p);
}
结果:
hello
hello
没有任何问题啊,你用的什么编译器,gcc编译器完全没问题!追问谢谢啊,我已经知道原因了你把10变成n,先输入n的值试试追答。。。。

怎么说呢,scanf输入数据之后会向发送一个回车字符,而你马上又gets了,可能就这么直接算作p的字符串给接受了,换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串!!!

具体的仔细查查,个人猜测追问不是,是直接输入进去,就是定义一个int n,然后scanf,然后p = (char*)....这个n不需要初始化吧追答嗯?没有说初始化啊,你仔细瞅瞅!说的就是scanf的问题啊追问啊....天,你自己输入的数字不就是初始化吗吗吗#include
#include
int main()
{
int n; scanf(n);

char *p =(char*)malloc(sizeof(char)*n);
gets(p);
printf("%s \n", p);
}追答。。。。。
亲,我说的是后面这一句。。。
scanf输入数据之后会向发送一个回车字符,而你马上又gets了,可能就这么直接算作p的字符串给接受了,换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串!!!

所以你会输入完n的值之后就啥都没有了,还有scanf格式不标准,最好别这么写!追问额,好吧,我只是为了方便。不管怎么说,谢谢哈你耐心的解答行吗?
全部回答
  • 1楼网友:三千妖杀
  • 2021-03-26 19:38
gets函数变量为一连续字符串,
char a[10] 定义了一个连续的字符串空间,而malloc分配的不一定是连续的。
现在gets函数基本不用了,因为很容易造成输入长度溢出而导致一些不可预知的后果,推荐使用fgets函数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯