附加到数组的开头

我试图将一个字符串附加到现有数组的开头。

char array[50] = {5,A,0,1,0,0,1,1}; char firstElement[] = {"F"}; char secondElement[] = {"s", "S"}; 

我知道我们可以使用memcpy或strcat附加到数组。 但我想追加到现有数组的开头。 你能告诉我怎么样吗? 谢谢。

不是没有复制元素 – 任何理由不使用c ++ std :: vector?

 std::vector array; array.push_back(5); // adds to end array.push_back(A); // insert a new array at beginning char myarray [] = { 1,2,3 }; array.insert (array.begin(), myarray, myarray+3); 

如果你需要在前面插入东西,std :: deque更有效,但在其他方面与向量相同

 std::deque array; array.push_back(5); // adds to end array.push_back(A); array.push_front(4); // inserts at front 

最简单的方法是使用std::string而不是与字符数组作战:

 std::string s = ", world!"; s = "Hello" + s; 

假设你真的在使用字符串,我已经有了一些飞跃。 如果它确实是你想要的一个字符数组,那么也许使用std::vector

您的代码中有几个错误:

 char array[50] = {5,A,0,1,0,0,1,1}; 

所有的值(不包括A,我猜是变量)都不是字符(从技术上讲,它们可以被转换,但这不正确)。

 char firstElement[] = {"F"}; char secondElement[] = {"s", "S"}; 

这两个数组也是不正确的,因为“F”,“s”和“S”不是字符,而是字符串(或char *)。

尽管如此,我认为解决问题的最佳方法是使用std:String和函数append

 string str1 ="Frist string"; string str2 ="Second string"; str1.append(str2); 

不需要memcpystrcat ,你使用C ++而不是C,利用它!

在C中的数组的开头插入没有什么特别之处。它与在任何地方插入相同,而且效率低,因为它涉及移动整个数组:

  • 使用将整个arrays向右移动

     memcpy(array + 3 * sizeof(char), array, 8 * sizeof(char)); 
  • 在他们的位置复制新元素:

     memcpy(array, firstElement, sizeof(firstElement)); memcpy(array + sizeof(firstElement), secondElement, sizeof(secondElement)); 

此外,您应该使用单引号将数组声明更正为char数组。

正如其他人指出的那样,如果用C ++编写程序,则应该使用std::string

我唯一能看到的就是将你的数组移到右边并在开头写下第一个元素。

 for (int i = 48 ; i >= 0 ; i--) { array[i+1] = array[i]; } array[0] = firstElement[0]; 

你的字符串的总长度必须小于50,否则你将失去额外的字符

你也可以使用一个列表。 你可以在开头追加而不重写字符

如果不使用memcpy或类似方法移动内存中的元素,则无法完成此操作。 数组是一个连续的内存,你已经填满了内存的开头,因此在开始时没有空间来附加任何元素。 您需要将当前元素从数组的开头移开,然后您可以在开始时插入元素。 否则请考虑使用std::vector ,它允许您在任意位置插入元素,并负责移动当前元素

在您的代码中,以下声明将无法编译:

A是不变的,未经宣布的

 char arr[50] = {5,A,0,1,0,0,1,1}; 

你想要一个字符'F' ,当你说, "F"它代表一个字符串文字。 请注意,初始化char数组时会隐式添加'\0' 0’null字符。

 char firstElement[] = {"F"}; 

同上,在这种情况下你有太多的初始化者,因此你应该有's' and 'S'

 char secondElement[] = {"s", "S"}; 

为简化复制,C ++为您提供了std :: string ,可用于在任何一端附加两个字符串。

 std::string first = "F"; std::string second = "sS"; second.append(first); first.append(second); // OR