[英]C comparing char to “\n” warning: comparison between pointer and integer
我有以下C代碼部分:
char c;
int n = 0;
while ( (c = getchar()) != EOF ){
if (c == "\n"){
n++;
}
}
在編譯期間,編譯器告訴我
warning: comparison between pointer and integer [enabled by default]
問題是,如果替代"\\n"
與'\\n'
沒有警告的。 任何人都可以解釋我的原因嗎? 另一個奇怪的事情是我根本不使用指針。
我知道以下問題
但在我看來,他們與我的問題無關。
PS。 如果不是char c
而是int c
,那么仍然會有警告。
'\\n'
被稱為字符文字,是標量整數類型。
"\\n"
被稱為字符串文字,是一種數組類型。 請注意,數組會衰減為指針,因此您就會收到該錯誤。
這可能有助於您理解:
// analogous to using '\n'
char c;
int n = 0;
while ( (c = getchar()) != EOF ){
int comparison_value = 10; // 10 is \n in ascii encoding
if (c == comparison_value){
n++;
}
}
// analogous to using "\n"
char c;
int n = 0;
while ( (c = getchar()) != EOF ){
int comparison_value[1] = {10}; // 10 is \n in ascii encoding
if (c == comparison_value){ // error
n++;
}
}
基本上'\\ n'是一個計算為char的文字表達式。 “\\ n”是一個計算指針的文字表達式。 因此,通過使用此表達式,您實際上正在使用指針。
有問題的指針指向一個內存區域,該區域包含一個字符數組(在本例中為\\ n),后跟一個終止字符,告訴代碼數組結束的位置。
希望有幫助嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.