2012-02-21 141 views
6

我在做第一學期C++課程的回顧,我想我錯過了一些東西。字符串佔用了多少字節?字符?一個字符串需要多少個字節?字符?

我們給出的例子是,有些是字符文字和有些是字符串:

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

我尤其換行符在那裏的使用混淆。

+0

「string」,你的意思是'std :: string'還是一個null結尾的char *'? – 2012-02-21 20:13:02

回答

24
#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的反斜槓。

+2

如果你解釋這是家庭作業,我會+1。 – Pubby 2012-02-21 20:15:09

+2

如果您將'std :: endl'更改爲''\ n'',我會爲您+1。 – 2012-02-21 20:16:11

+12

@Rob:由於''\ n''已經是作業的一部分,我不想不必要地混淆Moshe。 – fredoverflow 2012-02-21 20:18:15

1

字符串佔用的字節數等於字符串中的字符數加1(終止符),乘以每個字符的字節數。每個字符的字節數可能會有所不同。對於常規的char類型,它是1個字節。

除了倒數第二個,這是兩個,最後一個是零,所有的例子都是一個字符。 (有些是char類型的,並且僅限定一個單一的字符。)

+0

每個字符的字節數是1. **始終**。請編輯答案。 – 2012-02-21 20:15:15

+0

'char'由定義1字節,但是一個字節可能不是8位。 – Pubby 2012-02-21 20:15:32

+0

@Joe:C標準明確表示:1字節必須至少8位,但可以更多。 – ildjarn 2012-02-21 20:19:43

5
  • char,根據定義,佔用一個字節。
  • 使用'的文字是char文字;使用"的文字是字符串文字。
  • 一個字符串文字隱含地以空字符結尾,因此它將佔用字面值中可觀察字符數的一個字節。
  • \是轉義字符,而\n是換行符。

把這些放在一起,你應該能夠弄明白。

0
'n' - 0x6e 
"n" - 0x6e00 
'\n' - 0x0a 
"\n" - 0x0a00 
"\\n" - 0x5c6e00 
"" - 0x00 
3

下面就帶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:我已經寫了一些非常愚蠢的,感謝鳴叫鴨指出了這一點。

+1

實際上,sizeof(「n」)應該等於2.類型「 n「不是'const char *',而是'const char [2]',它是兩個字節。 – 2012-02-21 20:20:57

+0

Mooing Duck - true,my bad – 2012-02-21 20:21:35

0

您似乎指的是字符串常量。並將它們與字符常量區分開來。

A char是所有架構上的一個字節。字符常量使用單引號分隔符'

字符串是一個連續的字符序列,帶有尾隨的NUL字符以標識字符串的結尾。一個字符串使用雙引號字符'''。

此外,您還介紹了C字符串常量表達式語法,它使用黑色斜線來指示特殊字符。\n是一個字符串常量中的一個字符。

所以對於例子'n', "n", '\n', "\n"
'n'是一個字符
"n"是一個字符的字符串,但它需要的存儲(一個兩個字符爲字母n,一個用於NUL
'\n'是一個字符,換行(按Ctrl-J基於ASCII系統)
"\n"是一個字符加上一個NUL。

我離開的人基於這些解出。

+0

's/constants/literals /' – 2012-02-21 20:28:57

1

'n' - >一個char。 A char總是1個字節。這不是一個字符串。
"n" - >一個字符串文字,包含一個n和一個終止NULL char。所以2個字節。
'\n'→One char,A char總是1個字節。這不是一個字符串。
"\n" - >一個字符串文字,包含一個\n和一個終止NULL char。所以2個字節。
"\\n" - >一個字符串文字,包含一個\,一個'\ n'和一個終止NULL char。所以3個字節。
"" - >一個字符串文字,包含一個終止NULL char。所以1個字節。

2
  • 'n':不是字符串,是文字字符,一個字節,字符n的ascii碼。
  • "n":字符串,兩個字節,一個用於n,一個用於空字符,每個字符串都在末尾。
  • "\n":兩個字節爲\ n代表需要一個字節的「新行」,加上空字符的一個字節。
  • '\n':與第一個相同,文字字符,不是字符串,一個字節。
  • "\\n":三個字節..一個用於\,一個用於換行符和空字符
  • "":一個字節,只是空字符。
+0

詳細說明「string」(C string?'std :: string'?字符串文字?)爲了清晰度勝利。 – 2012-02-21 20:28:19

+0

對不起,我的意思是C字符串。 – gztomas 2012-02-21 21:29:40

相關問題