我有一个函数,它具有输入和指向C中char数组的指针。在该函数中我正在操作主字符串,但是我想在使用它之前在另一个变量中制作备份副本。我想把它放在char backup [2000]中,所以如果指针改变了,备份就不会改变。 我怎么能这样做?
答案 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)
您的朋友是以下功能
但最重要的是,最好的朋友是男人:)
答案 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( backup, source );
请注意链接。
为避免溢出,目标指向的数组大小应足够长,以包含与源相同的C字符串(包括终止空字符),并且不应在内存中与源重叠。