Gla*_*ost 7 c c++ string gcc null-terminated
原来这只是"c ++不是c布鲁斯"的另一个案例
我想要的是
const char hex[16] = "0123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)
唯一有效的
char hex[16] = "0123456789ABCDE"; hex[15] = "F";
Run Code Online (Sandbox Code Playgroud)
是否有任何编译器选项或我可以做的事情使gcc编译器中的字符串不为null终止.这样我就可以制作一个(n)常数数组
Sie*_*geX 11
不需要编译器选项,它已经非NUL终止.标准说只有在NUL适合的情况下才应添加NUL,否则它将是溢出.它可能只是你的数组中存储器中的下一个字节\0
§6.7.8p14
字符类型数组可以用字符串文字初始化,可选择用大括号括起来.字符串文字的连续字符(如果有空间或数组大小未知,则包括终止空字符)初始化数组的元素.
NUL终止的字符串是该语言固有的.您可以拥有一个字符数组,并逐个设置每个字符:
char hex [] = {'0', '1', '2', ... 'F'};
Run Code Online (Sandbox Code Playgroud)
你是在自问自答.如果明确给出数组长度,如:
const char hex[16] = "0123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)
那么它当然不会以空值终止,因为没有为空终止保留的存储空间.(hex[16]在对象的边界之外,因此读或写它是未定义的行为.如果它恰好读为0,那就是你的UB ...)
只有当你隐藏长度时才会这样,如:
const char hex[] = "0123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)
或者如果您使用字符串文字作为对象而不是初始化程序,它将具有空终止.
顺便说一下,如果您不打算使用它,为什么要关心是否存在空终止.您是否想要从二进制文件中删除字节?:-)
| 归档时间: |
|
| 查看次数: |
2793 次 |
| 最近记录: |