我正在使用函数'strdup'将char *插入char **并获得search.c:174:13: warning: assignment makes pointer from integer without a cast [enabled by default]
警告。
char** temp;
...
temp = NULL;
...
temp[0] = strdup(tokens[i]);
tokens[i]
只是strtok()
函数中的字符串。
我不认为这是相关的,但我也有这个警告......
search.c:174:5: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
只显示,因为我有-ansi标志,我检查了该功能是否有效,我只是讨厌看到警告。
如果这个问题得到解答,我也很抱歉;有很多问题类似于这一个,但没有一个帮助我,因为我可以告诉我的类型是匹配的。 (显然不是因为我收到了警告)
答案 0 :(得分:6)
我不认为这是相关的,但我也有这个警告... search.c:174:5:警告:隐式声明函数'strdup'[-Wimplicit-function-declaration]
这是相关的,两者都有相同的原因。您在范围内没有strdup
的原型,因此返回类型假定为int
(在C89 / C90中;隐式声明已在C99中删除,但默认情况下仍被广泛接受)。 / p>
您需要#include <string.h>
并启用其中一个允许定义strdup
的特征测试宏,例如_XOPEN_SOURCE >= 500
或_BSD_SOURCE
(甚至可能只有-ansi
才有效)。
答案 1 :(得分:5)
GCC的-ansi
标志设置旧ISO C90标准的兼容模式。该标准未定义strdup
;这是一个POSIX功能。要么摆脱-ansi
标志,它用于严格编译符合C90的代码,或者通过避免使用POSIX API来遵守标准。
答案 2 :(得分:1)
你可能忘记了#include
一些文件。我的猜测是你应该在任何函数之前和源文件的开头附近添加:
#include <string.h>