c/c++语言开发共享使用strdup

#include  #include  #include  int main() { char *s; s = strdup("foo"); printf("%sn", s); getchar(); return 0; } 

看起来很无害,不是吗? 但是我的IDE,即Dev-C ++,给出了以下警告:警告:赋值从整数中生成指针而不进行强制转换

如果您要更改此代码,警告将消失:

 char *s; s = (char*)strdup("foo"); 

使用strdup

任何人都可以帮我解释一下吗?

    您正在使用Dev-C ++,但strdup不是C或C ++标准的一部分,它是POSIX函数。 您需要定义正确的(根据您的IDE的文档)预处理程序符号,以便头文件声明strdup …这是必要的,以便头文件在符合C或包含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); 

    那是不对的。 strdup已经返回char * 。 还有别的错。 可能是因为您没有包含声明此函数的真实返回类型的正确头文件。

     #include  

    你缺少#include 。 在没有函数签名的情况下,编译器假定strdup返回一个int,因此返回警告。

    man strdup

    你会得到以下的东西

     #include char* strdup(const char * s); 

    所以strdup()返回char*那里shuld没有任何问题实际上在你的情况下它需要隐式声明strdup()所以默认返回类型是int因此你得到这个警告

    要么include

    要么

    给出前向声明char* strdup(const char *);

    所有使用完成后,也不要忘记最后free(s)

      以上就是c/c++开发分享使用strdup相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享使用strdup

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562554.html

      (0)
      上一篇 2021年2月5日 上午1:01
      下一篇 2021年2月5日 上午1:03

      精彩推荐