![](/img/trans.png)
[英]C++ How to convert a big integer in std::string form to byte/char-array/vector
[英]Is the “NUL” character (“\0”) byte separated or is it assigned to that char-array with the string?
如果我定义一个字符串:
char array[5] = {"hello"};
是否将 NUL 字符 (\0) 字节“隐藏”添加到“array[5]”中,使得 memory 中的数组不包含 5 个字节,而是包含 6 个字节?
或者 NUL 字符字节是否与 memory 中的“array[5]”“分开”仅在 char 数组的最后一个元素之后,但不直接分配给“array[5]”?
如果我会这样说:
i = strlen(array);
printf("The Amount of bytes preserved for array: %d",i);
为数组 [5] 保留的字节数会是什么结果?
“NUL”字符(“\0”)字节是否位于 memory 中 char 数组的最后一个元素之后分隔,还是分配给该 char 数组?
“NUL”字符(“\0”)字节是否位于 memory 中 char 数组的最后一个元素之后分隔,还是分配给该 char 数组?
不,两个答案都不正确。 详情见下文。
C 的答案:
如果您这样编写代码,并且显式大小对于终止符来说太小,则array
将恰好有 5 个元素,并且不会有 NUL 字符。
strlen(array)
具有未定义的行为,因为array
不是字符串(它没有终止符)。 char array[5] = {"hello"};
相当于char array[5] = {'h', 'e', 'l', 'l', 'o'};
.
另一方面,如果你写
char array[] = "hello";
它相当于
char array[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
strlen
将报告5
。
C标准的相关部分是:
字符类型的数组可以由字符串字面量初始化,可选地用大括号括起来。 字符串文字的连续字符(包括终止 null 字符,如果有空间或如果数组大小未知)初始化数组的元素。
(强调我的。)
C++ 的答案:
您的代码无效。 [dcl.init.string]状态:
初始化器的个数不得多于数组元素的个数。 [示例:
char cv[4] = "asdf"; // error
格式不正确,因为隐含的尾随
'\0'
没有空间。 —结束示例]
在 C++ 中, char array[5] = {"hello"}
为 6 个字节。 但是您只分配了五个字节。 因此,数组声明不正确。
或者,这可行: char array[6] = {"hello"}
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.