警告:指针和整数之间的比较

时间:2017-05-16 14:36:51

标签: string pointers warnings

struct smt{
char *c;
};



int main(){
   char *w="astring";
   if(smt->c == w[0])
   ...do something
}

如何修复if中出现的警告以及exacly导致的警告?

2 个答案:

答案 0 :(得分:1)

警告显示是因为您正在将smt->c char*w[0]进行比较,int是一个字符(此比较的内容会隐式转换为{{} 1}})。

你可能意味着比较第一个字符:

if(smt->c[0] == w[0]) { ... }

如果要比较完整字符串,请使用

if(strcmp(smt->c, w) == 0) { ... }

甚至更好,如果您知道字符串可以有的最大长度,请使用strncmp

答案 1 :(得分:0)

错误来自这样一个事实:经常(几乎总是),你不想将地址(指针)与角色进行比较。

您将char * c与char'a'进行比较。你想做的就是我相信:

struct smt{
    char *c;
};



int main(){
   char *w="astring";
   // Here smt->c returns a char*
   // w[0] gets you the first character, so 'a'
   if(strcmp(smt->c, w) == 0)
   ...do something
}

如果您想比较两个字符串的前两个字符,则必须将[0]添加到smt-> c