【问题标题】:Warning : comparison between pointer and integer警告:指针和整数之间的比较
【发布时间】:2017-05-16 14:36:50
【问题描述】:
struct smt{
char *c;
};



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

如何解决我在 if 中收到的警告以及导致它的原因?

【问题讨论】:

  • 阅读你的if(smt->c == w[0]),阅读错误信息,你应该明白了:p

标签: string pointers warnings


【解决方案1】:

显示警告是因为您将smt->c(即char*)与w[0](一个字符)进行比较(对于此比较,该字符被隐式转换为int)。

您的意思可能是这样比较第一个字符:

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

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

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

或者更好的是,如果您知道字符串可以具有的最大长度,请使用strncmp

【讨论】:

    【解决方案2】:

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

    您正在将 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
    }
    

    如果要比较两个字符串的第一个字符,则必须在smt->c中添加[0]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多