社区
C语言
帖子详情
关于字符数组。。。。(求助)
沉珂
2005-12-27 06:53:09
#include <stdio.h>
main()
{
char m[5];
gets(m);
puts(m);
}
输入6个字符,还是输出来,为什么?
如果是字符数组不一定要添加\o的话,
那么在puts时不是不能判断是不是字符串已经结束。。。。
寒,这个问题一直不懂,
问问。。。。
谢谢。。。
...全文
227
7
打赏
收藏
关于字符数组。。。。(求助)
#include main() { char m[5]; gets(m); puts(m); } 输入6个字符,还是输出来,为什么? 如果是字符数组不一定要添加\o的话, 那么在puts时不是不能判断是不是字符串已经结束。。。。 寒,这个问题一直不懂, 问问。。。。 谢谢。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
0黄瓜0
2005-12-27
打赏
举报
回复
2 内存的分配是以 字 (8 个字节)为单位的!!注意, 是字 !!
=======================================
一个字是4个字节,就是说char m[5];char m[6];char m[7];char m[8];都会分二个字长(8个字节),但char m[4];char m[3];只会分一个字长(4个字节)
输入 少于 8个字符时候,都可以正常输出。
如果多了 8 个,那么就 OVER吧 ~
===============================
正确。请运行:
#include <stdio.h>
main()
{
char m[5];
char n[5];
gets(m);
puts(m);
}
这个如果输入多了 4 个,那么就 OVER吧 ~
#include <stdio.h>
main()
{
char m[4];
char n[5];
gets(m);
puts(m);
}
jixingzhong
2005-12-27
打赏
举报
回复
1 gets()自动会在后面增加一个 \0 终结字符串
2 内存的分配是以 字 (8 个字节)为单位的!!注意, 是字 !!
所以有这样的情况:
输入 少于 8个字符时候,都可以正常输出。
如果多了 8 个,那么就 OVER吧 ~
jixingzhong
2005-12-27
打赏
举报
回复
简单 !!
有两个要点 :
flyelf
2005-12-27
打赏
举报
回复
这种情况下,就会给他人的溢出攻击提供了条件了
沉珂
2005-12-27
打赏
举报
回复
是不是这样:
gets的参数是指针,接收到字符串后就开始存在内存中,而不判断是不是还在数组的范围内,
通过指针++来实现存储,输入结束后自动加个\o,puts输出时,碰到\o结束输出。
whatsouta
2005-12-27
打赏
举报
回复
这是因为你输入进去后,从第4个字符开始以后的内存还没有被其他程序用到
tanq
2005-12-27
打赏
举报
回复
就是不做越界检查啊,这里很多人都说了!
表面是正确的,其实程序是错误的
C语言之
字符数组
本文详细介绍了C语言中的
字符数组
,包括其定义、初始化、输入输出及字符串处理函数如puts、gets、fgets、strcpy、strcmp、strlen等。特别指出gets函数的安全问题及其替代方案,并通过实例演示了
字符数组
操作。
C语言数组——
字符数组
本文深入探讨C语言中
字符数组
的定义、初始化及使用特点,包括一维
字符数组
的内存占用、初始化过程中的空字符处理及字符串常量的运用。
浅谈
字符数组
本文详细介绍了C语言中的
字符数组
,包括定义、初始化、赋值及其与整型数组的区别。同时,讲解了字符串处理函数如gets、puts、strcat、strcmp等的用法,并探讨了
字符数组
与字符指针的异同,以及多维数组的字符指针操作。文章还强调了
字符数组
在动态赋值和字符串结束标志'
字符数组
本文详细介绍了
字符数组
的概念、初始化方式、字符串结束标志以及
字符数组
的输入输出方法。
【C语言】
字符数组
的定义及使用
本文详细介绍了C语言中的
字符数组
,包括如何定义、初始化
字符数组
,字符串与字符串结束标志'
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章