我在以下代码中收到错误assignment makes pointer from integer without a cast
,这是什么意思?
char * splitter;
if(splitter = strchr(key, ':') != NULL && *(splitter + 1) == ' ')
答案 0 :(得分:3)
这是因为操作的优先级。您需要添加一组额外的parens以确保它按正确的顺序发生:
char * splitter;
if((splitter = strchr(key, ':')) != NULL && *(splitter + 1) == ' ')
否则它将评估为:
splitter = (strchr(key, ':') != NULL)
由于strchr(key, ':') != NULL
将评估为1
或0
,因此在您的示例中,您要为指针类型指定一个整数,因此会出现警告。
然而,我会像你的第二个例子那样写它,因为它更简单,更不容易出错。缩短一行不会增加任何东西,除了复杂性。
答案 1 :(得分:2)
不等于运算符!=的优先级高于赋值运算符=,因此原始行的读取方式与splitter = (strchr(key, ':') != NULL)
相似,而不是预期的(splitter = strchr(key, ':)) != NULL
,因此编译器会尝试将分配结果分配给拆分器strchr()和NULL之间的比较。
答案 2 :(得分:1)
!=
运算符的优先级高于=
运算符。这意味着您的表达式splitter = strchr(key, ':') != NULL
实际上被解释为splitter = (strchr(key, ':') != NULL)
。
将分配括在括号中以增加该部分的优先级:
(splitter = strchr(key, ':')) != NULL
答案 3 :(得分:1)
!=
的优先级高于=
。你应该完全括起来:
if (((splitter = strchr(key, ':')) != NULL) && (*(splitter + 1) == ' '))