以下代码正在抛出
“警告:条件表达式中的指针/整数类型不匹配”。
我怎么解决这个问题?
#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;
}
答案 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]
是char
。 NULL
表示空指针,因此这种比较毫无意义。
答案 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;
}