【发布时间】:2012-03-12 04:04:53
【问题描述】:
我正在复习我第一学期的 C++ 课,我想我漏掉了一些东西。一个字符串占用多少字节?一个字符?
我们给出的例子是,有些是字符文字,有些是字符串:
'n', "n", '\n', "\n", "\\n", ""
我对其中的换行符的使用感到特别困惑。
【问题讨论】:
-
“字符串”是指
std::string还是以空结尾的char*?
我正在复习我第一学期的 C++ 课,我想我漏掉了一些东西。一个字符串占用多少字节?一个字符?
我们给出的例子是,有些是字符文字,有些是字符串:
'n', "n", '\n', "\n", "\\n", ""
我对其中的换行符的使用感到特别困惑。
【问题讨论】:
std::string 还是以空结尾的char*?
#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。
【讨论】:
std::endl 更改为 '\n',我会为您 +1。
'\n' 已经是任务的一部分,我不想不必要地混淆 Moshe。
std::endl 的正当理由。 +1
'n':不是字符串,是文字字符,一个字节,字母n的字符代码。"n":字符串,两个字节,一个用于 n,一个用于每个字符串末尾的空字符。"\n":两个字节作为 \n 代表“新行”,它占用一个字节,加上一个字节用于空字符。'\n':和第一个一样,文字字符,不是字符串,一个字节。"\\n":三个字节.. 一个用于 ,一个用于换行符和空字符"":一个字节,就是空字符。【讨论】:
std::string?字符串文字?)为了清楚起见。
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 指出这一点。
【讨论】:
const char*,而是const char[2],即是两个字节。
字符串占用的字节数等于字符串中的字符数加 1(终止符)乘以每个字符的字节数。每个字符的字节数可以变化。常规 char 类型为 1 个字节。
您的所有示例都是一个字符长,除了倒数第二个是两个,最后一个是零。 (有些是char 类型,只定义一个字符。)
【讨论】:
char 的字节数为1。总是。请编辑答案。
char 定义为 1 个字节,但一个字节可能不是 8 位。
'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 个字节。
【讨论】:
您似乎指的是字符串常量。并将它们与字符常量区分开来。
char 在所有架构上都是一个字节。字符常量使用单引号分隔符'。
字符串是一个连续的字符序列,带有一个尾随 NUL 字符,用于标识字符串的结尾。字符串使用双引号字符'"'。
此外,您还介绍了 C 字符串常量表达式语法,该语法使用黑斜线表示特殊字符。 \n 是字符串常量中的一个字符。
所以对于示例'n', "n", '\n', "\n":'n' 是一个字符"n" 是一个包含一个字符的字符串,但它需要存储两个字符(一个用于字母 n 和一个对于 NUL'\n' 是一个字符,换行符(基于 ASCII 的系统上的 ctrl-J)"\n" 是一个字符加一个 NUL。
我让其他人根据这些来解谜。
【讨论】:
'n' - 0x6e
"n" - 0x6e00
'\n' - 0x0a
"\n" - 0x0a00
"\\n" - 0x5c6e00
"" - 0x00
【讨论】:
可能晚了 10 年。但是如果你只使用“Hello”,它只是一个字符数组,所以这将占用的字节数是这个字符数组的字符数(在这种情况下为 5)+ 1(一个 NULL 字符),这将是6 在这种情况下。 因此,您可以采用以下规则:对于 c_strings(char 数组):字符数 + 1
还有你可以使用的 c++ 字符串 “包括 ” 之后 std::string = "你的文字在这里";
这个 c++ 字符串总是有一个固定的大小(在我的机器上是 28 字节)。
【讨论】: