[英]How many bytes does a string take? A char?
我正在復習我第一學期的 C++ 課,我想我遺漏了一些東西。 一個字符串占用多少字節? 一個字符?
我們給出的例子是,一些是字符文字,一些是字符串:
'n', "n", '\n', "\n", "\\n", ""
我對那里使用換行符感到特別困惑。
#include <iostream>
int main()
{
std::cout << sizeof 'n' << std::endl; // 1
std::cout << sizeof "n" << std::endl; // 2
std::cout << sizeof '\n' << std::endl; // 1
std::cout << sizeof "\n" << std::endl; // 2
std::cout << sizeof "\\n" << std::endl; // 3
std::cout << sizeof "" << std::endl; // 1
}
NUL
終止符的 C 樣式字符串。 \n
(換行符)只是一個字符, \\
(反斜杠)也是如此。 \\n
只是一個反斜杠,后跟n
。
'n'
:不是字符串,是文字字符,一個字節,字母 n 的字符代碼。"n"
:字符串,兩個字節,一個用於 n,一個用於每個字符串末尾的空字符。"\n"
:兩個字節 \n 代表“新行”,它占用一個字節,加上一個字節用於空字符。'\n'
:與第一個字符相同,不是字符串,一個字節。"\\n"
: 三個字節.. 一個用於 \,一個用於換行符,一個用於空字符""
:一個字節,只是空字符。char
占用一個字節。'
的文字是字符文字; 使用"
的文字是字符串文字。\
是轉義字符, \n
是換行符。把這些放在一起,你應該能夠弄清楚。
以下將在內存中占用 x 個連續字符:
'n' - 1 char (type char)
"n" - 2 chars (above plus zero character) (type const char[2])
'\n' - 1 char
"\n" - 2 chars
"\\n" - 3 chars ('\', 'n', and zero)
"" - 1 char
編輯:格式固定
edit2:我寫了一些非常愚蠢的東西,感謝 Mooing Duck 指出這一點。
字符串占用的字節數等於字符串中的字符數加 1(終止符)乘以每個字符的字節數。 每個字符的字節數可以變化。 常規char
類型為 1 個字節。
你所有的例子都是一個字符長,除了倒數第二個是兩個,最后一個是零。 (有些是char
類型,只定義一個字符。)
'n' - 0x6e
"n" - 0x6e00
'\n' - 0x0a
"\n" - 0x0a00
"\\n" - 0x5c6e00
"" - 0x00
您似乎指的是字符串常量。 並將它們與字符常量區分開來。
char
在所有架構上都是一個字節。 字符常量使用單引號分隔符'
。
字符串是一個連續的字符序列,帶有一個尾隨 NUL 字符,用於標識字符串的結尾。 字符串使用雙引號字符 '"'。
此外,您還介紹了使用黑斜線表示特殊字符的 C 字符串常量表達式語法。 \n
是字符串常量中的一個字符。
因此對於示例'n', "n", '\n', "\n"
:
'n'
是一個字符
"n"
是一個有一個字符的字符串,但它需要存儲兩個字符(一個用於字母n
,一個用於 NUL
'\n'
是一個字符,換行符(基於 ASCII 的系統上的 ctrl-J)
"\n"
是一個字符加一個 NUL。
我讓其他人根據這些來解謎。
'n'
-> 一個char
。 一個char
總是 1 個字節。 這不是一個字符串。
"n"
-> 一個字符串文字,包含一個n
和一個終止 NULL char
。 所以2個字節。
'\n'
-> 一個char
,一個char
總是 1 個字節。 這不是一個字符串。
"\n"
-> 一個字符串文字,包含一個\n
和一個終止 NULL char
。 所以2個字節。
"\\n"
-> 一個字符串文字,包含一個\
、一個 '\n' 和一個終止 NULL char
。 所以3個字節。
""
-> 一個字符串文字,包含一個終止 NULL char
。 所以1個字節。
可能晚了10年。 但是如果你只使用“Hello”,它只是一個字符數組,所以這將占用的字節數是這個字符數組的字符數(在這種情況下為 5)+ 1(一個 NULL 字符),這將是6 在這種情況下。 因此,您可以采用以下規則:對於 c_strings(char 數組):字符數 + 1
您還可以使用 "include " 和 std::string = "Your text here"; 之后訪問 c++ 字符串。
此 c++ 字符串始終具有固定大小(在我的機器上為 28 字節)。
取決於是否使用 UTF8 一個 char 是 1byte 如果 UTF16 一個 char 是 2bytes 無關緊要 字節是 00000001 還是 10000000 一個完整的字節被注冊並為該字符保留,一旦聲明用於初始化,如果 char 改變了這個寄存器用新的價值。
一個字符串字節等於“”之間的字符數。
例子:11111111是一個填充字節,UTF8 char T = 01010100(1個字節)
UTF16 字符 T = 01010100 00000000(2 個字節)
UTF8 字符串“編碼”= 011000110110111101100100011010010110111001100111(6 字節)
UTF16 字符串“編碼”= 011000110000000001101111000000000110010000000000011010010000000001101110000000000110011100000000(12 字節)
UTF8 \n = 0101110001101110(2 字節)
UTF16 \n = 01011100000000000110111000000000(4 字節)
注意:您鍵入的每個空格和每個字符在編譯器中占用 1-2 個字節,但空間很大,除非您在 90 年代初為計算機或游戲機鍵入 4mb 或更少的代碼,否則您不必擔心關於字符串或字符的字節。
對內存有問題的事情是調用需要使用浮點數、小數或雙精度數進行大量計算的事情,並在循環或更新方法中使用數學隨機數。 最好在運行時或在固定時間更新上運行一次,並在整個時間跨度內取平均值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.