c++里对于这种情况是个什么定义?

加盾男爵 2018-08-16 11:25:56
一段代码
char dName[8] = {'A','r','-','1','5','3','7','8'};

对于这段代码在c++里合法么?
会对程序又什么影响?
PS 我的一个程序里面有很多这样的代码,但运行一直没问题。。。。
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlbertS 2018-08-16
  • 打赏
  • 举报
回复
合法的,用的时候需要注意,因为没有结尾的\0,如果想作为字符串用,最后一个元素需要是'\0'
加盾男爵 2018-08-16
  • 打赏
  • 举报
回复
引用 1 楼 Slzde_sub 的回复:
合法,但是容易越界, 比如调用strlen()的时候就会越界。;

那我这么理解对不对

我写的这个是字符数组,不是字符串,所以不能用cstring头文件里的那些处理字符串的函数来处理,而要当成数组来处理?
  • 打赏
  • 举报
回复
合法的啊,这个是字符数组,不能当字符串的用,记清楚这个就行了。
iamnobody 2018-08-16
  • 打赏
  • 举报
回复
楼上都说的对~
_肆 2018-08-16
  • 打赏
  • 举报
回复
对char数组,是分两种用法的,一种是单纯的表示一个字节的类型,一种是表示string

前者就类似我们常用的各种数组了,你把里面的每一个元素当场无符号一字节就行,随便写,写最后一位也没关系,用的时候也能直接取char[max-1]

但是考虑到char数组能表示string,就产生了一个机制,当你一个一个赋值,只要你的赋值数量小于数组大小,那它会自动在最后一位上写\0,哪怕你创建数组的时候没有初始化,但是赋值数量大于等于数组大小的时候,它不会写\0了,因为你申请的空间已经用完了,然后你去用这个数组,只要你没涉及到string,就不会报错,只有你把它当string去用的时候,比如strlen、printf("%s")这些,它是会找\0的,然后依次往后找找不到直到越界

如果你用vs或者什么编译器,写char dName[8] =“Ar-15378";它会提前告诉你越界而报错,因为很明显后面是个string,这时候char数组是当string用的,而你现在的这种写法,他会认为你可能是第一种用法,那我先不报错
  • 打赏
  • 举报
回复
引用 3 楼 qazaq408 的回复:
[quote=引用 1 楼 Slzde_sub 的回复:]
合法,但是容易越界, 比如调用strlen()的时候就会越界。;

那我这么理解对不对

我写的这个是字符数组,不是字符串,所以不能用cstring头文件里的那些处理字符串的函数来处理,而要当成数组来处理?[/quote]
如果程序里面保存的密码之类的会用这种写法,防止让人直接看出来。
也有用16进制的。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧