簡體   English   中英

C將char與“\ n”警告進行比較:指針和整數之間的比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM