在C ++中追加到Char数组的末尾

时间:2012-03-31 10:50:25

标签: c++ arrays

是否有一个命令可以将一个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');

我很确定语法会起作用,或类似的东西。

4 个答案:

答案 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);