strdup警告指针来自整数w/o强制转换

Pet*_*odo 1 c warnings

我正在使用函数'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]);
Run Code Online (Sandbox Code Playgroud)

哪里tokens[i]只是strtok()函数的一个字符串.

我不认为这是相关的,但我有这样的警告,以及... search.c:174:5: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]这是唯一的显示,因为我有-ansi标志和我检查了函数的工作,我只是讨厌看到警告.

如果这个问题得到解答,我也很抱歉; 有很多问题类似于这一个,但没有一个帮助我,因为我可以告诉我的类型是匹配的.(显然不是因为我收到了警告)

Dan*_*her 6

我不认为这是相关的,但我也有这个警告... search.c:174:5:警告:隐式声明函数'strdup'[-Wimplicit-function-declaration]

它是相关的,两者都有相同的原因.您没有strdup范围内的原型,因此假定返回类型为int(在C89/C90中;隐式声明已在C99中删除,但默认情况下仍被广泛接受).

您需要#include <string.h>并启用一个strdup可以定义的特征测试宏,例如_XOPEN_SOURCE >= 500_BSD_SOURCE(甚至可能只在没有的情况下才能工作-ansi).


Fre*_*Foo 5

GCC的-ansi标志设置旧ISO C90标准的兼容模式.strdup没有在该标准中定义; 这是一个POSIX功能.要么摆脱-ansi标志,要么严格编译符合C90的代码,要么遵守标准,不要使用POSIX API.