我是初學者。我不知道爲什麼?我使用的代碼:: Blocks.Please閱讀下面的代碼:
如果Q = 'W¯¯',它打印out W。
如果q = 「 W 」,它打印出$。
我是初學者。我不知道爲什麼?我使用的代碼:: Blocks.Please閱讀下面的代碼:
如果Q = 'W¯¯',它打印out W。
如果q = 「 W 」,它打印出$。
字面"W"
不是單一char
,而是一個NULL結尾的字符串組成的'W'
和'\0'
。
的一種方法將其分配給const char*
並打印與%s
const char* q = "W";
printf("%s", q);
正如在評論中指出,以獲得所需的行爲,你可以通過增加你的編譯器的警告級別捕獲這種類型的錯誤。
char q = "W";
打開警告級別,你的編譯器應該抱怨這個。 'W'
不是一個字符,它是一個字符串字面值,它的類型是char [2](兩個字符的數組,一個'W'和'\ 0')。它衰減爲一個指向它的第一個字符的指針並被轉換到char
,這恰好轉換爲'$'的ascii值。
要打印字符串文字,正確的格式說明符是%s
。
聲明
char q = "W";
需要字符串的文字"W"
的地址,並且施放地址的到char
的值,即,該地址的最低顯著字節被分配給c
。
就你而言,"W"
的地址可以是例如0x12345624
,它被鑄造爲0x24
,即'$'
。
很好的答案,這是發生在這裏的情況。 – pradipta
你應該得到的錯誤。 GCC 4.7.2給我錯誤:從'const char *'無效轉換爲'char'[-fpermissive]'用於C++並且'錯誤:初始化從指針變成整數而沒有轉換'用於C. – chris
'W'是字符,「W」是指向數組的2個字符('W'和'\ 0') – aland
決定使用c或C++,在C++中查看字符串,在c中查找c字符串(字符數組,你的字符串中的最後一個字符是0字節(與字符0不同的是Ascii的0x30),這可能有助於清理事情,否則這個問題正是@aland所描述的 – ted