永发信息网

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

答案:2  悬赏:50  手机版
解决时间 2021-03-27 01:06
啊,谁能告诉我,为什么定义一个char a[10],就能用 gets(a)输入,但是定义一个c
最佳答案
#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格式不标准,最好别这么写!追问额,好吧,我只是为了方便。不管怎么说,谢谢哈你耐心的解答行吗?
全部回答
gets函数变量为一连续字符串,
char a[10] 定义了一个连续的字符串空间,而malloc分配的不一定是连续的。
现在gets函数基本不用了,因为很容易造成输入长度溢出而导致一些不可预知的后果,推荐使用fgets函数。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
欢学英语教育怎么样?值得报吗?
中彩票了去领奖工作人员会不会心动偷偷调包?
圣经中有关于当天的事情当天做的经文吗?
2寸水泵1小时排水量
解牌:无论你骗了什么,撒谎本身就足以摧毁一
嗨钱网上征信吗?
有哪些优美的古诗词是写给朋友的,表达什么思
宴会开始于什么时候
土耳瓜的浆在手上不好洗净用什么方法可以把洗
我最近我自己总是觉得很烦,变得不想和别人接
成了怎么造句
求问信用卡还款用卡事易好用吗?
体育彩票怎么打票
16949/VDA6.5之产品审核与产品检验本质区
6000÷8÷25÷5怎么巧算
推荐资讯
请问提高李树坐果率的措施有哪些?
小学生应不应该给老师送礼
“键盘侠”英语怎么说
什么是:佛法版有两种观呼吸的方法,怎么做?
请问您知道有哪些上戏或北影等老师办的表演培
盘点十大韩剧,哪部才是你的最爱
桂花陈酒的好处
音响2.1声道有低音没有高音怎么维修
找出规律填空 1 6 4 3 7 9 12 32 45 36 21 34
湘潭三件宝是什么 龙牌酱油灯芯糕,陀陀妹几
(什么)地站着
石油天然气钻井平台周围多远距离不能住人
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?