? Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы. Как правильно задавать вопросы в технических форумах
нельзя нам такое использовать, надо либо cin>>h;, либо cin.getline(h, 100); с последним не копилится, а с первым вариантом, он компилит, но при обращении ругается на не тот адрес Snow Dream [2d, Android] (v1.3)
Это есть структура с указателем на указатель. Никакого массива тут нет.
Код
char** d2 = (*(m+n))->list_stop;
Здесь ты объявляешь еще один указатель на указатель типа char и пытаешься присвоить ему непонятную хрень. У тебя нет вообще переменной типа slist, а ты пытаешься обратиться к его члену. А дальше уже не важно. Так не делают ты все переусложняешь. Читай еще, про строки в C. Я бы написал код, но не понял что ты хочешь добиться.
int n=0; //начальное кол-во транспорта pubt* m[100];
все это глобально
Добавлено (13 апреля 2015, 21:14) --------------------------------------------- Вот кода поболее, может понятнее станет, в main только обращение к функции
Код
struct pubt { int num_park; //номер парка int num_rout; //номер маршрута int num_stop; //кол-во остановок int interval; //интервал char** list_stop; //список остановок char* start_time; //время начала работы char* end_time; //время окончания работы char* type_t; //тип транспорта };
int n=0; //начальное кол-во транспорта pubt* m[100]; //массив транспорта
void new_e() //новый элемент { int a, b, c, d; char e[100], f[100], g[100], h[100]; *(m+n) = new pubt;
Не выделена память для *list_stop, он указывает на неизвестно куда for (int i=0; i<c; i++) { std::cin>>h; d2 = new char*; *d2 = new char[strlen(h) + 1]; strcpy_s(*d2, strlen(h) + 1, h); d2++; } так будет работать, если выделить память. Но все равно, непонятно зачем так сделано. массива же все равно нет. Надо его создавать чтоб list_stop указывал на массив.
. Это указатель на несуществующий массив. Для него никто за нас память не выделит. понял, у тебя массив и создается в цикле. Я сразу не въехал что c - это количество остановок. a b c d - завязывай с такими названиями, давай что-то значащие названия. А то сам запутаешься.
a b c d - локальные переменные только для этой функции, так что я их и использую, так то стараюсь более точные названия использовать Snow Dream [2d, Android] (v1.3)
Погодь, если у тебя в цикле создается массив, то надо в него перенести объявление с присвоением. Иначе, в структуру не попадет результат.
Код
std::cout<<"Тип транспорта\n"; std::cin>>g; (*(m+n))->type_t = new char[strlen(g)+1]; strcpy_s((*(m+n))->type_t, strlen(g)+1, g);
std::cout<<"Введите список остановок\n"; for (int i=0; i<c; i++) { std::cin>>h; char** d2 = (*(m+n))->list_stop = new char*; *d2 = new char[strlen(h) + 1]; strcpy_s(*d2, strlen(h) + 1, h); d2++; }
Вот так например. И все равно не правильно. Надо же еще и индекс "c" использовать. Короче не правильно. Легче будет создать массив сразу как юзер ввел количество остановок. Вот так, наверное:
char** d2 = (*(m+n))->list_stop = new char*; это чтобы именно в структуре был результат? а разве он в первом случае не попадет, мы же с адресами работаем, он должен, обращаясь по адресу, попадать в структуру и в ней писать?
Добавлено (13 апреля 2015, 22:47) --------------------------------------------- вроде работает
Добавлено (13 апреля 2015, 22:50) --------------------------------------------- самый первый вариант работает, сейчас проверил, все нормально
Мы создаем новый указатель через new каждый раз. А в структуре был другой. Совсем голова не варит. Надо будет проверить, что я там накарябал. Ты смотрел что там в самой структуре, в результате? Или просто что ошибок нет?
Добавлено (13 апреля 2015, 23:22) --------------------------------------------- В общем я сам взял и проверил. Первый вариант не правильный, в структуру не пишет. Я его и написал просто чтоб показать что надо память выделять. Последний пишет правильно. А там сам смотри. Если тебя устроило, что не вылетает и этого достаточно, то пусть так и будет. Вылетит когда попробуешь вывести результат из структуры.