C编译器:“类型'char *'和'int'不是赋值兼容的” - 但是没有int?

时间:2011-10-15 04:26:48

标签: c

我正在将一个FOSS包移植到HP-UX。我有一个编译器警告,我无法弄清楚。我应该注意到我正在使用HP-UX捆绑的免费/ usr / bin / cc,而不是附加购买的编译器,以使包尽可能广泛使用。

编译(只是没有标志的cc)说:

Warning 942: "grep.c", line 288 # Types 'char *' and 'int' are not assignment-compatible.
        if ((fname = strsep(&lp, ":")) == NULL)
             ^^^^^^^^^^^^^^^^
声明该函数中的

fname:

    char    *fname, *line, *lp, *ln;

所以fname是一个char ptr。这就是strsep()返回的内容:

char *strsep(char **stringp, const char *delim) {

strsep包含在OpenBSD中:http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/strsep.c?rev=1.6;content-type=text%2Fplain

所以...... strsep返回一个char指针,这就是fname。 strsep只能返回一个字符指针或NULL。那么所有这些中的'int'在哪里?

2 个答案:

答案 0 :(得分:5)

#include是否正确定义了strsep()的头文件?如果没有,那么传统的做法就是假设函数返回int,这可能会导致你的问题。

答案 1 :(得分:5)

我猜你的标题根本没有声明strsep,因为它是非标准的,这会导致编译器假定它返回int而且你的错误。尝试将-D_BSD_SOURCE添加到您的编译器选项中(或将其隔离为仅适用于string.h。如果这不起作用,请通过系统标题(或手册页)grep以确定是否存在任何地方strsep的原型以及你需要做什么样的宏观舞蹈。作为最后的手段(假设你的libc中有它),你可以自己制作原型。

此外,我认为您可以使用标准strsep替换strtok并对周围代码进行一些修改。它们用于相同的目的,但使用略有不同的界面。