我有 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'
,则根本没有警告。任何人都可以向我解释原因吗?另一个奇怪的事情是我根本没有使用指针。
我知道以下问题
但在我看来,它们与我的问题无关。
附注。如果不是
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/