社区
C语言
帖子详情
关于字符数组。。。。(求助)
沉珂
2005-12-27 06:53:09
#include <stdio.h>
main()
{
char m[5];
gets(m);
puts(m);
}
输入6个字符,还是输出来,为什么?
如果是字符数组不一定要添加\o的话,
那么在puts时不是不能判断是不是字符串已经结束。。。。
寒,这个问题一直不懂,
问问。。。。
谢谢。。。
...全文
230
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
打赏
举报
回复
就是不做越界检查啊,这里很多人都说了!
表面是正确的,其实程序是错误的
安卓给string对象赋值_String,StringBuilder,StringBuffer的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > StringString最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可...
关于String、StringBuffer、StringBuilder的区别
最近看到了一道题目: 正确答案:C 下面就这题的其他选项给出解析: String String不可变!先来看看String的源码: public final class String implements Serializable, Comparable<String>, CharSequence { private final byte[] value; priva...
Java基础:String、StringBuffer、StringBuilder的区别
这篇文章主要介绍了String、StringBuffer、StringBuilder的区别详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。放假在家里休息,闲来无事,想巩固巩固自己的基础知识。Java基础这个我会一直更新的,希望大家关注 收藏 点赞。
String、Stringbuilder与Stringbuffer的区别,String、Stringbuilder与Stringbuffer的适用场景
没循环情况下用String的加号拼接,有循环情况下使用StringBuilder,任何场景都不推荐使用StringBuffer。
String、StringBuilder与StringBuffer区别
一、Java String 类——String字符串常量 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章