使用指针将一个数组的内容复制到另一个数组

时间:2014-03-19 01:50:15

标签: c++

我一直在学习C ++已经有一段时间了,而且当谈到指针时,我遇到了一个“障碍”。我正在使用它作为我的http://www.cplusplus.com/doc/tutorial/pointers/学习材料,但我仍然遇到问题。所以为了测试我想要将一个数组的内容复制到另一个数组中。我写了以下内容。

char arrayA[15] = "abcdef";
char arrayB[15];

char *a = arrayA;
char *b = arrayB;

cout << "before loop:" << endl;
cout << a << endl;
cout << b << endl;

while (*a != '\0') {
    // Copy the contents of a into b
    *b = *a;

    // Step
    a++;
    b++;
}

// Assign null to the end of arrayB
*b = '\0';

cout << "after loop:" << endl;
cout << a << endl;
cout << b << endl;

我得到以下结果。

before loop:
abcdef

after loop:

当我cout循环前的内容时,我得到了预期的结果。 a包含“abcdef”而b没什么,因为还没有价值。现在循环结束后,ab都没有显示任何结果。这是我迷失的地方。我使用*取消引用ab,并将a的值分配到b。我哪里做错了?我需要使用&吗?

解决方案:

循环完成后,指针*a指向arrayA的末尾,指针*b指向arrayB的末尾。因此,只需cout << arrayB即可获得arrayB的完整结果。或者创建一个永不改变的指针,并始终在循环结束时指向arrayB char *c = arrayBcout << c

3 个答案:

答案 0 :(得分:3)

在循环ab发生变化后,它们会指向字符串的结尾。您需要复制指针以便逐步执行,以便在您迭代时不要更改ab的位置。

答案 1 :(得分:3)

问题是您输出的是用于迭代数组的临时变量。它们现在位于复制数据的末尾。您应该输出arrayAarrayB的值。

答案 2 :(得分:0)

记住数组的开头。在这一刻,你在增加指针并在循环结束后打印在数组末尾指向它们的东西。

char arrayA[15] = "abcdef";
char arrayB[15];

char *a_beg = arrayA;
char *b_beg = arrayB;
char *a;
char *b;

cout << "before loop:" << endl;
cout << a_beg << endl;
cout << b_beg << endl;

a = a_beg;
b = b_beg;
while (*a != '\0') {
    // copy contents of a into b and increment
    *b++ = *a++;
}
// assign null to the end of arrayB
*b = '\0';

cout << "after loop:" << endl;
cout << a_beg << endl;
cout << b_beg << endl;