Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Почему каждый раз перезаписывается значение в двумерном массиве строк?

#cpp #массивы #указатели


Необходима помощь в следующем:

char * UserData[4] = { new char[50], new char[50], new char[13], new char[4] };
char *** phoneBook = new char ** [10];

phoneBook[0] = UserData;
gets(UserData[0]);
gets(UserData[1]);
gets(UserData[2]);
gets(UserData[3]);

cout << phoneBook[0][2] << " Test string 1\n\n"; // Вывод стоки, здесь все хорошо.

phoneBook[1] = UserData;
gets(UserData[0]);
gets(UserData[1]);
gets(UserData[2]);
gets(UserData[3]);

// Вывод стоки, здесь всё хорошо.
cout << phoneBook[1][3] << " Test string 2\n\n"; 
// Значение перезаписалось! Почему?
cout << phoneBook[0][2] << " Test string 1\n\n WHY IS IT CHANGING???";



Проблема в том, что я как бы "перезаписываю" каждый раз значения, которые вводил
с клавиатуры.
Мне нужно сделать так, чтобы я имел возможность ввести массив данных 1, потом массив
данных 2 и потом сделать их вывод например. Как это можно сделать?

    


Ответы

Ответ 1



Указатели phoneBook ссылаются на один и тот же массив. phoneBook[0] = UserData; phoneBook[1] = UserData; Вам нужна структура Например: struct phoneBookStruct{ char UserData0[50]; char UserData1[50]; char UserData2[13]; char UserData3[4]; } Вот её вы можете использовать как массив phoneBookStruct phoneBook[10]; gets(phoneBook[0].UserData0); gets(phoneBook[0].UserData1); gets(phoneBook[0].UserData2); gets(phoneBook[0].UserData3); cout<

Ответ 2



Потому что, вы используйте один и тот же кусок данных -- UserData: phoneBook[0] = UserData; phoneBook[1] = UserData; phoneBook[0] и phoneBook[1] указывают на одни и те же данные И для c++ рекомендуется использовать std::string, а не char *

Комментариев нет:

Отправить комментарий