我有以下使用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函数?
答案 0 :(得分:2)
是的,如果malloc
无法分配内存并返回NULL
。
当您尝试复制一个非常大的字符串时,或者如果您的地址空间非常碎片且几乎已满(因此taht malloc
无法找到要分配的连续内存块时,这可能会合理地发生)或者在没有太多内存的嵌入式系统中。
答案 1 :(得分:1)
strdup
失败的可能性取决于malloc
失败的可能性。在具有虚拟内存的现代操作系统上,malloc
失败是非常罕见的。在系统内存太低而malloc
必须返回NULL
之前,操作系统甚至可能已经终止了整个过程。
答案 2 :(得分:1)
如果内存泄漏,内存耗尽并非闻所未闻。 因此,检查null,打印错误消息,甚至可能在此时退出并不是一个坏主意。 请注意,如果内存不足,“printf”之类的东西将无效(或者可能无效,但根据我的经验不起作用)。所以你必须使用低级“写”等,你正在使用的文件描述符(如果你正在写入日志文件)应该已经打开了。