社区
C语言
帖子详情
关于 char [5] 和 char [6]
wlgc123321
2010-11-25 10:46:02
char a[5] = "hello";
char a[6] = "hello";
我知道这个会少个\0
可是我试了下好像两个都可行
mingw编译 运行
有请高人!
...全文
291
16
打赏
收藏
关于 char [5] 和 char [6]
char a[5] = "hello"; char a[6] = "hello"; 我知道这个会少个\0 可是我试了下好像两个都可行 mingw编译 运行 有请高人!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ZXW0521
2010-11-25
打赏
举报
回复
char a[5] = "hello";
然后a+5的地址刚好是0,
这次就输出对了,
如果某次运行,这个地址不为0,那就会打印出一些乱码
dingshaofengbinbin
2010-11-25
打赏
举报
回复
有意义吗??
hai040
2010-11-25
打赏
举报
回复
char a[5] = "hello";
不是说不放'\0'
而是把0放到申请的空间后面,写了其它人的数据
这里没出错可能是因为内存对齐
换4或8长度的字符串试试
wanghang8888
2010-11-25
打赏
举报
回复
你定义一个char a[5]={'a','b','c','d','e'};再输出cout<<a;就出错了,因为没有‘\0’.
zoudaokou2006
2010-11-25
打赏
举报
回复
MINGW我不知道。
但VS我跟踪过内存。
一般编译器都会做一些保护字节(另一个重要的原因是变量对其到特定值倍数字节,可以提高程序效率)
比如这里的char a[5] = "hello";
虽然你申请了只有5个字节,但是编译器可能会多出了几个字节给你做保护,如果这几个字节恰好又被初始化为0x00的话,好叻,你中彩票了。
虽然中彩票的几率蛮高,还是不要做这种操作,第一,本身就是错误;第二,即使侥幸不出事,你的代码依赖于编译器的特定行为,代码也丧失了可移植性;第三,这种代码,你让其他维护人员情何以堪啊,呵呵~~
zhutianjin4355255
2010-11-25
打赏
举报
回复
数组越界编译器不会报错,万一越界的内存存放着关键值,将会给楼主带来不可预料的后果
至善者善之敌
2010-11-25
打赏
举报
回复
你记住遇到CHAR 类型的多申请一个给\0就可以了
aining0809
2010-11-25
打赏
举报
回复
[Quote=引用 1 楼 yyg990441 的回复:]
某次运行正确,或者在某个特殊的编译器上运行正确不代表这个程序就正确.
就好象某次我买彩票中了100万,不代表我每次买都会中100万.
[/Quote]
同意!!
编译器的问题。
VC6.0会报错(error C2117: 'hello' : array bounds overflow)
GCC不会报错,但结果肯定不是你预期的。
wlgc123321
2010-11-25
打赏
举报
回复
嗯,谢谢以上各位回答
嗯 遵守规则
我只是好奇 一时找不到出错的例子
书上说会一直读取直到遇到\0为止 可是我这样写
char a[5] ="hello";
int age = 18;
char name[9]="zhangsan";
printf("%s\n",a);
也只打印hello 没有一直读到zhangsan
luciferisnotsatan
2010-11-25
打赏
举报
回复
是都可以编译运行。但第一个会溢出
debug模式下,变量之间会有些数据填充,可能发现不了错误。release模式下,就有可以出错。
Jesusgospelnj
2010-11-25
打赏
举报
回复
同意,内存在那,关键是你是否去访问,
無_1024
2010-11-25
打赏
举报
回复
最好遵守规则 都有'\0'但是第一个有内存溢出
yyg990441
2010-11-25
打赏
举报
回复
某次运行正确,或者在某个特殊的编译器上运行正确不代表这个程序就正确.
就好象某次我买彩票中了100万,不代表我每次买都会中100万.
wlgc123321
2010-11-25
打赏
举报
回复
[Quote=引用 12 楼 hai040 的回复:]
char a[5] = "hello";
不是说不放'\0'
而是把0放到申请的空间后面,写了其它人的数据
这里没出错可能是因为内存对齐
换4或8长度的字符串试试
[/Quote]
嗯 谢谢 我换成4 终于找到出错的例子了!!
赵4老师
2010-11-25
打赏
举报
回复
试试这个看输出什么:
char a[8] = "12345678";
char b[6] = "hello";
printf("%s,%s\n",a,b);
【LVL1_5_c】【课后练习】【6】编写一个
char
_search(
char
str[],
char
c),比较字符串和字符。
本文介绍了一个简单的字符搜索函数
char
_search的实现方法,该函数用于在一维字符数组中查找指定字符并返回查找结果。通过示例代码展示了如何使用此函数进行基本的字符匹配操作。
char
类型转换成int类型
本文介绍了一种将
char
类型转换为int类型的方法——利用ASCII码。通过举例说明了如何进行
char
到int的转换,例如将字符'5'和'6'相乘得到数值结果。
char
的整型运算
本文通过几个简单的示例介绍了字符(
char
)与整数(int)之间的转换原理,特别是如何利用ASCII码进行运算。例如,字符'5'和'6'相加的结果为107,并解释了如何将字符类型的数字转为整数。
正解python3 json报错:from None json.decoder.JSONDecodeError: Expecting value: line 1 column 6 (
char
5)
本文详细解析了在Ubuntu16.04LTS环境下,使用Python3.x进行字符串到JSON对象转换时遇到的错误“Expecting value: line 1 column 6 (
char
5)”。介绍了错误产生的原因,通常是因为JSON字符串中的NULL关键字不被识别,以及如何通过try...except语句捕获异常和使用正确的数据类型来避免此类问题。
mysql(5.6)操作知识第一节
本文介绍了MySQL 5.6中的数据类型,包括
CHAR
、VAR
CHAR
、INT、FLOAT以及DATE、TIME和DATETIME等。接着详细讲解了如何创建表,强调了主键约束的重要性,并提到了两种约束方式——列级约束和表级约束。此外,文章还提及了SQL的基础知识,如SQL分类、基本语法和表维护操作。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章