我有 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' ,则根本没有警告。
任何人都可以向我解释原因吗?另一个奇怪的事情是我根本没有使用指针。

我知道以下问题
  • warning: comparison between pointer and integer [enabled by default] in c
  • warning: comparison between pointer and integer in C

  • 但在我看来,它们与我的问题无关。

    附注。如果不是 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++;
        }
    }
    

    关于C 比较字符和 "\n"警告 : comparison between pointer and integer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13041701/

    10-09 08:56