在 C 语言中,我有两个字符数组:
char array1[18] = "abcdefg";
char array2[18];
如何将array1
的值复制到array2
中?我可以这样做吗:array2 = array1
?
你不能直接赋值数组来复制它们。如何将一个数组的内容复制到另一个数组中取决于多个因素:
对于 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);
你不能通过写 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) );
#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")
int array1[10] = {0,1,2,3,4,5,6,7,8,9};
替代。 - Tim以上方法均不适用于我。。
这个方法完美地解决了问题。
name
在此是通过函数传递的 char *name
strlen(name)
获取 char *name
的长度char
数组strcpy(temp,name);
将 name
的内容复制到 temp
按您所需使用,如果需要还原原始内容,请使用 strcpy(name,temp);
将 temp
再次复制回 name
,然后问题便可完美解决。
const int size = strlen(name);
char temp[size];
cout << size << endl;
strcpy(temp, name);
strcpy
或memcpy
。 - Alok Savechar array1[18] = {"abcdefg"};
不是一个正确的字符数组。 - aragaerchar array1[18] = "abcdefg";
或char array1[18] = {'a','b','c','d','e','f','g','\0'};
。 - aragaerchar array1[18] = {"abcdefg"};
是不寻常的,但是完全正确的。 - Daniel Fischer