![](/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.