基本的C风格的字符串副本

时间:2011-10-25 01:34:55

标签: c++ arrays string pointers

我正在尝试进行C风格的字符串复制,但有些东西不能正常工作。我做错了什么?

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main() {
    char string_a[20]="Good day!";
    char string_b[30]="Hi!";
    int i=0;
    cout << "string a: " << string_a << endl;
    cout << "string b: " << string_b << endl;
    while (*string_a++ = *string_b++) {
        cout << ++i << endl;
    }
    cout << "string a: " << string_a << endl;
    cout << "string b: " << string_b << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

你做不到:

string_a++

如果string_a被定义为数组。仅适用于指针,数组仅在特定情况下衰减为指针。

如果你改变:

while (*string_a++ = *string_b++) {
    cout << ++i << endl;
}

成:

char *pa = string_a, *pb = string_b;     // a "specific circumstance" :-)
while (*pa++ = *pb++) {
    cout << ++i << endl;
}

然后它会正常工作,输出:

string a: Good day!
string b: Hi!
1
2
3
string a: Hi!
string b: Hi!