是否有一个命令可以将一个char数组附加到另一个?理论上会像这样工作的东西:
//array1 has already been set to "The dog jumps "
//array2 has already been set to "over the log"
append(array2,array1);
cout << array1;
//would output "The dog jumps over the log";
这是一个非常简单的功能,我想,我很惊讶没有内置命令。
* 修改的
我应该更清楚,我并不是说改变数组的大小。如果array1设置为50个字符,但只使用了10个字符,那么仍然可以使用40个字符。我在想一个基本上会做的自动命令:
//assuming array1 has 10 characters but was declared with 25 and array2 has 5 characters
int i=10;
int z=0;
do{
array1[i] = array2[z];
++i;
++z;
}while(array[z] != '\0');
我很确定语法会起作用,或类似的东西。
答案 0 :(得分:13)
如果你不被允许使用C ++的字符串类(这是一个糟糕的教学C ++ imho),原始的,安全的数组版本看起来就像这样。
#include <cstring>
#include <iostream>
int main()
{
char array1[] ="The dog jumps ";
char array2[] = "over the log";
char * newArray = new char[std::strlen(array1)+std::strlen(array2)+1];
std::strcpy(newArray,array1);
std::strcat(newArray,array2);
std::cout << newArray << std::endl;
delete [] newArray;
return 0;
}
这可以确保您在连接的数组中有足够的空间,而不假设某些预定义的MAX_SIZE
。唯一的要求是你的字符串是空终止的,除非你做一些奇怪的固定大小的字符串黑客攻击,这通常就是这种情况。
编辑,一个带有“足够缓冲区空间”假设的安全版本:
#include <cstring>
#include <iostream>
int main()
{
const unsigned BUFFER_SIZE = 50;
char array1[BUFFER_SIZE];
std::strncpy(array1, "The dog jumps ", BUFFER_SIZE-1); //-1 for null-termination
char array2[] = "over the log";
std::strncat(array1,array2,BUFFER_SIZE-strlen(array1)-1); //-1 for null-termination
std::cout << array1 << std::endl;
return 0;
}
答案 1 :(得分:4)
如果你的数组是字符数组(似乎是这种情况),你需要一个 strcat() 。
您的目标数组应该有足够的空间来容纳附加的数据。
在C ++中,您最好使用 std::string 然后使用 std::string::append()
答案 2 :(得分:1)
没有内置命令,因为它是非法的。一旦声明,就不能修改数组的大小。
您要找的是std::vector
来模拟动态数组,或者更好的是std::string
。
std::string first ("The dog jumps ");
std::string second ("over the log");
std::cout << first + second << std::endl;
答案 3 :(得分:1)
您应该有足够的array1
数组空间,并使用strcat
之类的内容与array1
联系array2
:
char array1[BIG_ENOUGH];
char array2[X];
/* ...... */
/* check array bounds */
/* ...... */
strcat(array1, array2);