Базовая копия строки в стиле C - PullRequest
0 голосов
/ 25 октября 2011

Я пытаюсь сделать копию строки в стиле 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 Ответ

2 голосов
/ 25 октября 2011

Вы не можете сделать:

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!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...