2012-10-17 130 views
-1

我是初學者。我不知道爲什麼?我使用的代碼:: Blocks.Please閱讀下面的代碼:


enter image description here
enter image description here
enter image description here
enter image description here



如果Q = 'W¯¯',它打印out W
如果q = W ,它打印出$

+0

你應該得到的錯誤。 GCC 4.7.2給我錯誤:從'const char *'無效轉換爲'char'[-fpermissive]'用於C++並且'錯誤:初始化從指針變成整數而沒有轉換'用於C. – chris

+6

'W'是字符,「W」是指向數組的2個字符('W'和'\ 0') – aland

+0

決定使用c或C++,在C++中查看字符串,在c中查找c字符串(字符數組,你的字符串中的最後一個字符是0字節(與字符0不同的是Ascii的0x30),這可能有助於清理事情,否則這個問題正是@aland所描述的 – ted

回答

4

字面"W"不是單一char,而是一個NULL結尾的字符串組成的'W''\0'

的一種方法將其分配給const char*並打印與%s

const char* q = "W"; 
printf("%s", q); 

正如在評論中指出,以獲得所需的行爲,你可以通過增加你的編譯器的警告級別捕獲這種類型的錯誤。

2
char q = "W"; 

打開警告級別,你的編譯器應該抱怨這個。 'W'不是一個字符,它是一個字符串字面值,它的類型是char [2](兩個字符的數組,一個'W'和'\ 0')。它衰減爲一個指向它的第一個字符的指針並被轉換到char,這恰好轉換爲'$'的ascii值。

要打印字符串文字,正確的格式說明符是%s

4

聲明

char q = "W"; 

需要字符串的文字"W"的地址,並且施放地址的char的值,即,該地址的最低顯著字節被分配給c

就你而言,"W"的地址可以是例如0x12345624,它被鑄造爲0x24,即'$'

+0

很好的答案,這是發生在這裏的情況。 – pradipta

相關問題