OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3196|回复: 3

用字符串初始化字符数组的一个问题

[复制链接]

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-8-29 21:36:08 | 显示全部楼层 |阅读模式
5金钱
请教一个关于用字符串初始化字符数组的一个问题。
const char test[12]={"hello world!"};
这个在VC++编译是不通过的,因为多了个字符串结束符,test[12]装不下。
但是KEIL是便宜没有任何问题。
请问KEIL编译时是把最后的字符串结束符怎么处理了?是直接扔掉吗?还是会有越界的危险啊?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2015-6-2
在线时间
4 小时
发表于 2015-8-29 23:28:05 | 显示全部楼层
是会越界的,我现在手上没有VC,不过我记得以前用VC++6.0,VS2012都是可以通过编译的,现在用gcc也是可以通过编译的
能够确定的就是,他会按照地址顺序排列下去,包括'\0'
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
 楼主| 发表于 2015-8-30 14:30:58 | 显示全部楼层
回复【2楼】yangzhen86:
---------------------------------
VC++6.0通不过,我试过了。keil一点错误都没。
试了几种情况
const char test[12]={"hello world!"};//OK
const char test[12]={'h','e','l','l','o',' ','w','o','r','l','d','!'};//OK

const char test[12]={"hello world!!"};// error:  #144: a value of type "char [14]" cannot be used to initialize an entity of type "const char [12]"

const char test[12]={'h','e','l','l','o',' ','w','o','r','l','d','!','\0'};// error:  #146: too many initializer values

所以我想编译器没那么SB吧,另外两种错误都能识别,这个const char test[12]={"hello world!"};如果会越界没道理不报错啊。
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2015-6-2
在线时间
4 小时
发表于 2015-8-30 16:00:25 | 显示全部楼层
编译器一般只做语法性检查,逻辑性一般都不查的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 02:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表