我正在复习我的第一学期C ++课程,我想我错过了一些东西。字符串占用多少字节?一个炭?
我们给出的例子是,一些是字符文字,一些是字符串:
'n', "n", '\n', "\n", "\\n", ""
我对那里新行的使用感到特别困惑。
答案 0 :(得分:27)
#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; // 1
std::cout << sizeof "\n" << std::endl; // 2
std::cout << sizeof "\\n" << std::endl; // 3
std::cout << sizeof "n" << std::endl; // 2
}
单引号表示字符,双引号表示带有不可见NUL终结符的C样式字符串。
\n
(换行符)只是一个字符,\\
(反斜杠)也是如此。 \\n
只是一个反斜杠,后跟n。
答案 1 :(得分:6)
char
占用一个字节。'
的文字是字面文字;使用"
的文字是字符串文字。\
是转义字符,\n
是换行符。将这些放在一起,你应该能够弄明白。
答案 2 :(得分:4)
以下将在内存中使用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指出了这一点。
答案 3 :(得分:2)
'n'
:不是字符串,是文字字符,一个字节,字符n的ascii代码。"n"
:字符串,两个字节,一个用于n,一个用于每个字符串末尾的空字符。"\n"
:两个字节为\ n代表“新行”,它占用一个字节,加上一个字节用于空字符。'\n'
:与第一个文字字符相同,不是字符串,一个字节。"\\n"
:三个字节..一个用于\,一个用于换行,空字符""
:一个字节,只是空字符。答案 4 :(得分:1)
字符串占用的字节数等于字符串中的字符数加1(终结符),乘以每个字符的字节数。每个字符的字节数可以变化。常规char
类型为1个字节。
你的所有例子都是一个字符长,除了倒数第二个,它是两个,最后一个是零。 (有些类型为char
,只定义一个字符。)
答案 5 :(得分:1)
'n'
- &gt;一个char
。 char
始终为1个字节。这不是一个字符串
"n"
- &gt;一个字符串文字,包含一个n
和一个终止NULL char
。所以2个字节
'\n'
- &gt;一个char
,A char
始终为1个字节。这不是一个字符串
"\n"
- &gt;一个字符串文字,包含一个\n
和一个终止NULL char
。所以2个字节
"\\n"
- &gt;一个字符串文字,包含一个\
,一个'\ n'和一个终止NULL char
。所以3个字节
""
- &gt;一个字符串文字,包含一个终止NULL char
。所以1个字节。
答案 6 :(得分:0)
'n' - 0x6e
"n" - 0x6e00
'\n' - 0x0a
"\n" - 0x0a00
"\\n" - 0x5c6e00
"" - 0x00
答案 7 :(得分:0)
您似乎是指字符串常量。并将它们与角色常数区分开来。
char
是所有体系结构上的一个字节。字符常量使用单引号分隔符'
。
字符串是一个连续的字符序列,带有一个尾随的NUL字符,用于标识字符串的结尾。字符串使用双引号字符'“'。
此外,您还引入了C字符串常量表达式语法,该语法使用黑色滑动来指示特殊字符。 \n
是字符串常量中的一个字符。
因此,对于示例'n', "n", '\n', "\n"
:
'n'
是一个字符
"n"
是一个包含一个字符的字符串,但它需要两个字符的存储空间(一个用于字母n
,另一个用于NUL字符
'\n'
是一个字符,换行符(基于ASCII系统的ctrl-J)
"\n"
是一个字符加上一个NUL。
我会让其他人根据这些问题解决问题。
答案 8 :(得分:0)
可能晚了 10 年。但是如果你只使用“Hello”,它只是一个字符数组,所以这将占用的字节数是这个字符数组的字符数(在这种情况下为 5)+ 1(一个空字符),这将是6 在这种情况下。 因此,您可以采用规则:对于 c_strings(字符数组):字符数 + 1
您还可以使用 C++ 字符串访问 “包括 ” 之后 std::string = "你的文字在这里";
这个 C++ 字符串总是有一个固定的大小(在我的机器上是 28 字节)。