
c语言中gets()和puts()的问题
程序如下:main(){charabc[1];gets(abc);puts(abc);}输入:abcdefjhigklmn输出:abcdefjhigklmn我定义字符数组...
程序如下:
main(){
char abc[1];
gets(abc);
puts(abc);
}
输入:abcdefjhigklmn
输出:abcdefjhigklmn
我定义字符数组时只定义长度为一,但是为什么输入abcdefjhigklmn后它同样储存,然后输出,明显储存单元不够啊!!?? 展开
main(){
char abc[1];
gets(abc);
puts(abc);
}
输入:abcdefjhigklmn
输出:abcdefjhigklmn
我定义字符数组时只定义长度为一,但是为什么输入abcdefjhigklmn后它同样储存,然后输出,明显储存单元不够啊!!?? 展开
展开全部
你申请了一个char的空间,只有一个字节,但是内存分配的时候不会真的只分配你一个字节的空间,它还有其他的信息保存在后面的空间里面,但是你使用的时候最好还是不要超出你自己申请的空间,不然很可能会破坏它的数据结构!!所以能输进去很正常!!
字符串输出的话要是不遇到'\0'是不会停止的,你试试给abc[0]赋一个值,用puts(abc)应该照样会输出好多东西!!所以要把char数组当字符串输出的话,最好要在数组的结尾处加个'\0'
字符串输出的话要是不遇到'\0'是不会停止的,你试试给abc[0]赋一个值,用puts(abc)应该照样会输出好多东西!!所以要把char数组当字符串输出的话,最好要在数组的结尾处加个'\0'

2022-08-05 广告
苏州蓝晓生物科技有限公司。标准化核心产品:公司拥有完整的琼脂糖介质、葡聚糖介质、聚甲基丙烯酸酯介质生产线,年产分离介质50000L,产品质量稳定并达到国际领先水平。核心优势:公司核心技术人员拥有近二十年不同基质的基球开发和官能化的丰富技术经...
点击进入详情页
本回答由苏州蓝晓生物科技有限公司_提供
展开全部
gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()。这个事实导致gets函数只适用于玩具程序。
追问
怎么才能查看buffer的空间大小??
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char定义的是个字符,字符的长度是有限制的,你定义是一个,你输入那么多,所以才会出现溢出限制,你最好把字符串定义好好看看,这样会更好的帮助你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
缓冲区溢出。这个C语言不做检查的
你输入的再长一点,估计程序要崩溃了吧
比如输入两百个a试试
你输入的再长一点,估计程序要崩溃了吧
比如输入两百个a试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |