字符串需要多少字节?一个炭?

时间:2012-02-21 20:11:43

标签: c++ string character

我正在复习我的第一学期C ++课程,我想我错过了一些东西。字符串占用多少字节?一个炭?

我们给出的例子是,一些是字符文字,一些是字符串:

'n', "n", '\n', "\n", "\\n", ""

我对那里新行的使用感到特别困惑。

9 个答案:

答案 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;一个charchar始终为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 字节)。