字符串指针的副本

时间:2011-03-23 16:57:45

标签: c string pointers

我有一个函数,它具有输入和指向C中char数组的指针。在该函数中我正在操作主字符串,但是我想在使用它之前在另一个变量中制作备份副本。我想把它放在char backup [2000]中,所以如果指针改变了,备份就不会改变。 我怎么能这样做?

7 个答案:

答案 0 :(得分:11)

void function (const char *string)
{
   char *stringcopy = malloc (1 + strlen (string));
   if (stringcopy)
       strcpy (stringcopy, string);
   else  fprintf (stderr, "malloc failure!"):
   ...
   do whatever needs to be done with `stringcopy`
}

答案 1 :(得分:9)

要在C中复制字符串,有一个名为strdup的库函数:

使用strdup后,必须释放free分配的内存。

strdup一步提供内存分配和字符串复制操作。如果在某个时间点要复制的字符串大于数组的大小,则使用char数组可能会出现问题。

答案 2 :(得分:2)

您的朋友是以下功能

  • 的malloc
  • memset的
  • 释放calloc
  • 的memcpy
  • strcpy的
  • 的strdup
  • 函数strncpy

但最重要的是,最好的朋友是男人:)

答案 3 :(得分:1)

使用strncpy()。

void myfunc(char* inputstr)
{
    char backup[2000];
    strncpy(backup, inputstr, 1999);
    backup[1999] = '\0';
}

将1999个字符复制到2000个字符数组会留下空终止符的最后一个字符。

答案 4 :(得分:0)

在开始修改之前,您可以使用strcpy复制char数组(字符串)。

答案 5 :(得分:0)

使用memcpy创建备份。

char backup[2000];
char original[2000];

sprintf(original, "lovely data here");
memcpy(backup, original, 2000);

char* orig_ptr = original;

答案 6 :(得分:0)

strcpy reference.

strcpy( backup, source );

请注意链接。

  

为避免溢出,目标指向的数组大小应足够长,以包含与源相同的C字符串(包括终止空字符),并且不应在内存中与源重叠。