如何在C语言中复制字符数组?

108

在 C 语言中,我有两个字符数组:

char array1[18] = "abcdefg";
char array2[18];

如何将array1的值复制到array2中?我可以这样做吗:array2 = array1


3
strcpymemcpy - Alok Save
1
char array1[18] = {"abcdefg"}; 不是一个正确的字符数组。 - aragaer
1
虽然它可以作为字符数组工作(只是碰巧能工作),但应该声明为char array1[18] = "abcdefg";char array1[18] = {'a','b','c','d','e','f','g','\0'}; - aragaer
14
字符类型的数组可以用字符字符串字面值或UTF-8字符串字面值进行初始化,可选择加上大括号char array1[18] = {"abcdefg"}; 是不寻常的,但是完全正确的。 - Daniel Fischer
memcpy(..)是否处理内存(我的意思是其中的maloc和realoc)? - Coldsteel48
显示剩余4条评论
14个回答

0

你不能直接赋值数组来复制它们。如何将一个数组的内容复制到另一个数组中取决于多个因素:

对于 char 数组,如果你知道源数组以 null 结尾,并且目标数组足够大以容纳源数组中的字符串(包括 null 结尾符),则可以使用 strcpy()

#include <string.h>

char array1[18] = "abcdefg";
char array2[18];

...

strcpy(array2, array1);

如果您不确定目标数组是否足够大,但源是C字符串,并且您希望目标成为适当的C字符串,请使用snprinf()

#include <stdio.h>

char array1[] = "a longer string that might not fit";
char array2[18];

...

snprintf(array2, sizeof array2, "%s", array1);

如果源数组未必以空字符结尾,但您知道两个数组的大小相同,您可以使用 memcpy:
#include <string.h>

char array1[28] = "a non null terminated string";
char array2[28];

...

memcpy(array2, array1, sizeof array2);

0

你不能通过写 array2 = array1 直接复制。

如果你想要手动复制,需要遍历 array1 并逐个复制元素,如下所示 -

int i;
for(i=0;array1[i]!='\0';i++){
 array2[i] = array1[i]; 
}
array2[i]='\0'; //put the string terminator too

如果您可以使用字符串库,则可以按以下方式执行 -
strncpy ( array2, array1, sizeof(array2) );

0
对于整数类型
#include <string.h>    

int array1[10] = {0,1,2,3,4,5,6,7,8,9};
int array2[10];


memcpy(array2,array1,sizeof(array1)); // memcpy("destination","source","size")

1
那个无法编译。请使用 int array1[10] = {0,1,2,3,4,5,6,7,8,9}; 替代。 - Tim

0

以上方法均不适用于我。。 这个方法完美地解决了问题。 name 在此是通过函数传递的 char *name

  1. 使用 strlen(name) 获取 char *name 的长度
  2. 将其存储在常量变量中很重要
  3. 创建相同长度大小的 char 数组
  4. 使用 strcpy(temp,name);name 的内容复制到 temp

按您所需使用,如果需要还原原始内容,请使用 strcpy(name,temp);temp 再次复制回 name,然后问题便可完美解决。

    const int size = strlen(name);
    char temp[size];
    cout << size << endl;
    strcpy(temp, name);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接