2015-09-23 41 views
1

在C它已經到了關注,有這2個指定的語法之間的差異之間的差異觀察Ç - 報價和單引號(「VS」)

char test[5] = {"c", "o", "o", "l", "\0"}; // with quotation 

帶來錯誤:

error: (near initialization for 'test') 
error: excess elements in char array initializer 
error: (near initialization for 'test') 
error: excess elements in char array initializer 
error: (near initialization for 'test') 
error: excess elements in char array initializer 
error: (near initialization for 'test') 

凡爲

char test[5] = {'c', 'o', 'o', 'l', '\0'}; // with apostrophe 

編譯細。這樣做有什麼?

0123的原因
+0

''x''是一個字符文字。 '「x」是包含一個字符的字符串文字。 – Ryan

+0

單個字符與字符串(字符序列)。 –

回答

2

此數組中的元素是字符(每個1字節):

char test[5] = {'c', 'o', 'o', 'l', '\0'};

這是一個空終止的C字符串。它在內存中的表現方式完全相同。它由整整5個字節:字母「酷」,並終止空字符:

char test2[5] = {"cool"};

這包括兩個字節:

char test3[] = "c";

你原來的例子是一個數組的2字節字符串。與前面的例子不同,它實際上是一個2級數組。您必須聲明它是這樣:

char *test[] = {"c", "o", "o", "l", "\0"};

+0

@Blastfurnace - 這是一個錯字,謝謝你指出:) – paulsm4

2

在C中,當你使用單引號時,它表示一個字符,雙引號表示字符串。而且,由於您將數組聲明爲char,因此它不能在其中存儲字符串。

2

「x」不是一個字符,它是一個字符串文字。它與兩個字符'x''\0'的數組相同。

我認爲它是這樣的:

 _ _ _ _ _ 
"x" => |'x'|'\0'| 
     - - - - - 
2
char test[5] = {'c', 'o', 'o', 'l', '\0'}; // with apostrophe 

是正確的語法,因爲正如你已經聲明,測試是可以存儲5個字符的字符數組。 char * test [5] = {「c」,「o」,「o」,「l」,「\ 0」}; //帶引號

這是可以接受的,因爲你聲明test是一個指向字符串的指針數組。

在ideone.com中運行以下代碼並查看。

#include <stdio.h> 

int main(void) { 
// your code goes here 

char* teststring[5] = {"c", "o", "o", "l", "\0"}; // with quotation 

char testchar[5] = {'c', 'o', 'o', 'l', '\0'}; 
printf("%s\n", teststring[2]); 

printf("%c\n", testchar[2]); 

return 0; 
} 
0

在C中,

兩個單引號,',被用來表示一個字符常數。
兩個雙引號"用於表示字符串文字。

字符常量只能表示一個字符。 'ab'不是有效的字符常量。

字符串文字可以包含多個字符。