Динамический массив строк

Рейтинг: 0Ответов: 1Опубликовано: 08.02.2015

Помогите, пожалуйста, понять, в чем ошибка.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char* str;
char **ptr;

for (int i=0; i<2; i++) {
    cin >> str;
    int len = strlen(str); // вычислим длину нашей строки
    ptr[i] = new char[len +1]; // выделим память
    strcpy(ptr[i], str); // скопируем строку str в ptr
}
for (int i=0; i<2; i++) {
    cout  << ptr[i] << endl; // покажем что содержится в ptr
}

delete[] ptr; // освободим выделенную память
return 0;

}

Ответы

▲ 3

Минимальные изменения, чтобы код заработал:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str[1024];
char **ptr;
const int N = 2;

ptr = new char*[N];

for (int i=0; i<N; i++) {
    cin >> str;
    int len = strlen(str); // вычислим длину нашей строки
    ptr[i] = new char[len +1]; // выделим память
    strcpy(ptr[i], str); // скопируем строку str в ptr
}
for (int i=0; i<N; i++) {
    cout  << ptr[i] << endl; // покажем что содержится в ptr
}

for (int i=0; i<N; i++) {
    delete[] ptr[i];
}
delete[] ptr; // освободим выделенную память
return 0;

}

Код, который написан по правилам с++ (хотя этот код ещё далек от идеала). Посмотрите, как короче он стал.

#include <iostream>
#include <cstring>
#include <vector>

using namespace std;
int main() {
    vector<string> ptr;
    const int N = 2;

    for (int i=0; i<N; i++) {
        string str;
        cin >> str;
        ptr.push_back(str);
    }
    for (int i=0; i<ptr.size(); i++) {
        cout  << ptr[i] << endl; // покажем что содержится в ptr
    }

    return 0;
}