社区
C语言
帖子详情
关于 char [5] 和 char [6]
wlgc123321
2010-11-25 10:46:02
char a[5] = "hello";
char a[6] = "hello";
我知道这个会少个\0
可是我试了下好像两个都可行
mingw编译 运行
有请高人!
...全文
264
16
打赏
收藏
关于 char [5] 和 char [6]
char a[5] = "hello"; char a[6] = "hello"; 我知道这个会少个\0 可是我试了下好像两个都可行 mingw编译 运行 有请高人!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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);
理解
char
*、
char
** 和
char
*[] 的区别
3. `
char
*[]`:`
char
*[]` 是一个字符串指针数组,也称为 C 字符串数组。它是一个一级指针数组,每个元素都是一个 `
char
*` 类型的指针,指向一个字符串。2. `
char
**`:`
char
**` 是一个指向指针的指针,也称为指向 C 字符串的指针数组。1. `
char
*`:`
char
*` 是一个指向字符的指针,也称为 C 字符串。需要注意的是,在 C 语言中,`
char
*[]` 和 `
char
**` 在某些上下文中可以互换使用,但它们的语义和用法略有不同。以上两种写法效果等同。
c++的
char
[]和
char
*的区别
大家先来看这道测试题:
char
str1[] = "abc";
char
str2[] = "abc"; const
char
str3[] = "abc"; const
char
str4[] = "abc"; const
char
*str5 = "abc"; const
char
*str6 = "abc";
char
*str7 = "abc"; c
c语言中
char
怎样用,C语言中
char
*和
char
[]用法区别分析
C语言中
char
*和
char
[]用法区别分析本文实例分析了C语言中
char
* 和
char
[]的区别。分享给大家供大家参考之用。具体分析如下:一般来说,很多人会觉得这两个定义效果一样,其实差别很大。以下是个人的一些看法,有不正确的地方望指正。本质上来说,
char
*s定义了一个
char
型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以:当
char
*s = "hello";后,...
char
和var
char
区别
char
是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而var
char
是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。
char
和var
char
区别 1、最大长度:
char
最大长度是255字符,var
char
最大长度是65535个字节。2、定长:
char
是定长的,不足的部分用隐藏空格填充,var
char
是不定长的。3、空间使用:
char
会浪费空间,var
char
会更加节省空间。4、查找效率:
char
查找效率会很高,var
char
查
java
char
值_java中常用
char
码值参照
Char
("0") 为0的字符
Char
("1")
Char
("2")
Char
("3")
Char
("4")
Char
("5")
Char
("6")
Char
("7") 响铃
Char
("8") 回格
Char
("9") tab(水平制表符)
Char
("10") 换行
Char
("11") tab(垂直制表符)
Char
("12") 换页
Char
("13") 回车 chr(13)&chr(10) 回车和换行的...
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章