#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *s;
s = strdup("foo");
printf("%s\n", s);
getchar();
return 0;
}
看起来很无害,不是吗?
但我的 IDE(Dev-C++)给出了以下警告:
警告:赋值使指针来自整数而不进行强制转换
如果您像这样更改代码,警告就会消失:
char *s;
s = (char*)strdup("foo");
谁能帮我解释一下吗?
您使用的是 Dev-C++,但 strdup 不是 C 或 C++ 标准的一部分,它是一个 POSIX 函数。您需要定义正确的(根据 IDE 的文档)预处理器符号,以便头文件声明 strdup ...这是必要的,以便头文件在包含到符合标准的 C 或中时不会污染名称空间C++ 源文件。
对于简单的便携式替代方案,请考虑
char* mystrdup(const char* s)
{
char* p = malloc(strlen(s)+1);
if (p) strcpy(p, s);
return p;
}
或者,如果您知道 strdup 实际上在库中,您可以将其声明从 string.h 复制到您自己的源文件或标头中...或者使用手册页中更简单的声明:
char *strdup(const char *s);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)