当strdup功能失败?

时间:2012-03-29 14:44:38

标签: c string strdup

我有以下使用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函数?

3 个答案:

答案 0 :(得分:2)

是的,如果malloc无法分配内存并返回NULL

当您尝试复制一个非常大的字符串时,或者如果您的地址空间非常碎片且几乎已满(因此taht malloc无法找到要分配的连续内存块时,这可能会合理地发生)或者在没有太多内存的嵌入式系统中。

答案 1 :(得分:1)

strdup失败的可能性取决于malloc失败的可能性。在具有虚拟内存的现代操作系统上,malloc失败是非常罕见的。在系统内存太低而malloc必须返回NULL之前,操作系统甚至可能已经终止了整个过程。

答案 2 :(得分:1)

如果内存泄漏,内存耗尽并非闻所未闻。 因此,检查null,打印错误消息,甚至可能在此时退出并不是一个坏主意。 请注意,如果内存不足,“printf”之类的东西将无效(或者可能无效,但根据我的经验不起作用)。所以你必须使用低级“写”等,你正在使用的文件描述符(如果你正在写入日志文件)应该已经打开了。