【发布时间】: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
struct smt{
char *c;
};
int main(){
char *w="astring";
if(smt->c == w[0])
...do something
}
如何解决我在 if 中收到的警告以及导致它的原因?
【问题讨论】:
if(smt->c == w[0]),阅读错误信息,你应该明白了:p
显示警告是因为您将smt->c(即char*)与w[0](一个字符)进行比较(对于此比较,该字符被隐式转换为int)。
您的意思可能是这样比较第一个字符:
if(smt->c[0] == w[0]) { ... }
如果要比较完整的字符串,请使用
if(strcmp(smt->c, w) == 0) { ... }
或者更好的是,如果您知道字符串可以具有的最大长度,请使用strncmp。
【讨论】:
错误来自这样一个事实,即您经常(几乎总是)不想将地址(指针)与字符进行比较。
您正在将 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]
【讨论】: