#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 *
Комментариев нет:
Отправить комментарий