2014-01-07 27 views
0

以下代码指针/整数类型不匹配是投掷警告:在条件表达式

“警告:条件表达式中指针/整数类型不匹配”。

我该如何解决这个问题?

#include<stdio.h> 

int main() 
{ 
    char *str = "Error"; 
    char *sch_str="pqrs"; 
    int i=1; 

    if (i >= 0) 
      str = (sch_str[i] != NULL) ? sch_str[i] : "Unknown"; 


    printf("%c\n",sch_str[i]); 
    printf("%s\n",str); 

    return 0; 
} 

回答

2

三元运算符的操作数必须转换为你它分配给了变量。

char tmp[2] = { sch_str[i], '\0' }; 
str = (sch_str[i] != '\0') ? tmp : "Unknown"; 
5

1.sch_str[i]不是指针。无法与NULL进行比较。
2.不能把[分配的值] sch_str[i]str

+1

是啊。但是,这不是**错误消息的内容。 – 2014-01-07 12:33:15

+0

@ H2CO3更新。 –

3
(sch_str[i] != NULL) 

你对测试NULL字符,你有一个逻辑上的错误。

sch_str是一个指向char,therfore sch_str[i]char。代表一个空指针,所以这个比较没有意义。

0

sch_str[i] != NULL是一个字符和NULL之间的比较。你做不到。 为了与NULL进行比较,它应该是一个指针。 char *sch_str="pqrs";是指向字符串"pqrs"的指针。然后sch_str[i]保持字符不是总字符串。您可以使用sch_str[i] != '\0'来完成。

2
更好

使用此

sch_str[i] != '\0' 

还有一件事的问题是在这整个

str = (sch_str[i] != NULL) ? sch_str[i] : "Unknown"; 

尝试用这种

str = (sch_str[i] != '\0') ? "hello": "Unknown"; 

更换这实际上要复制单个字符在str条件为真时这就是为什么它显示警告的那个

+0

它仍然给出同样的错误。 – Alvin

+0

@ user2281757我已经更新了代码,请再次参阅 – user2760375

0

首先,你需要改变的char *海峡为const char,然后!= '\ 0'

#include<stdio.h> 

int main() 
{ 
    const char *str = "Error"; 
    char *sch_str = "pqrs"; 
    int i=1; 

    if (i >= 0) 
      str = (sch_str[i] != '\0') ? sch_str : "Unknown"; 


    printf("%c\n",sch_str[i]); 
    printf("%s\n",str); 

return 0; 
}