【发布时间】:2012-03-29 14:44:38
【问题描述】:
我有以下使用 strdup 函数的代码
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
char source[] = "The Source String ";
int main()
{
char *dest;
if ((dest = _strdup(source)) == NULL)
{
fprintf(stderr, " Error allocation memory. ");
exit(1);
}
printf("The destination = %s\n", dest);
return 0;
}
它成功地说出源字符串,但我很感兴趣它在什么情况下失败以及它在日常问题中的使用效果如何?我知道它是由 strdup 决定的
char *strdup (const char *s)
{
char *d = malloc (strlen (s) + 1); // Space for length plus nul
if (d == NULL) return NULL; // No memory
strcpy (d,s); // Copy the characters
return d; // Return the new string
}
如果我们的字符串不为NULL,是否有可能导致strdup函数失败?
【问题讨论】:
-
小心你使用
_strdup而不是strdup,我不确定你知道为什么。 -
编译器给了我警告
-
@dato:编译器给了你一个关于
_strdup或strdup的警告?strdup函数未由 C 标准定义。它由 POSIX 定义。你可能需要做一些事情来让你的编译器识别它,比如#defineing 一些符号。使用_strdup而不是strdup不是一个好的解决方案。 -
Warning 1 警告 C4996:'strdup':不推荐使用此项目的 POSIX 名称。而是使用符合 ISO C++ 的名称:_strdup。详细信息请参见在线帮助。 c:\文档和设置\学生\我的文档\visual studio 2008\projects\strdup_function\strdup_function\strdup_function.cpp 8 strdup_function