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

时间:2014-01-07 12:22:03

标签: c pointers

以下代码正在抛出

  

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

我怎么解决这个问题?

#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;
}

6 个答案:

答案 0 :(得分:5)

1。 sch_str[i]不是指针。无法将其与NULL进行比较 2。无法将[{1}}的[赋值]放入sch_str[i]

答案 1 :(得分:3)

(sch_str[i] != NULL)

您正在针对NULL测试一个字符,您有一个逻辑错误。

sch_str是指向char的指针,因此sch_str[i]charNULL表示空指针,因此这种比较毫无意义。

答案 2 :(得分:2)

最好使用此

sch_str[i] != '\0'

还有一个问题就在于整个

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

尝试用此

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

实际上,当条件为真时,你正在复制str中的单个字符,这就是为什么它显示该

的警告

答案 3 :(得分:2)

三元运算符的操作数必须可以转换为您指定给它的变量。

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

答案 4 :(得分:0)

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

来完成此操作

答案 5 :(得分:0)

首先,您需要将char * str更改为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;
}