
Главная /Computers/Developing/ Парсинг строк на C++
Написал функцию для парсинга строк вида "строка1,строка2,строка3,строка4", чтобы вытаскивать элементы из строки по номеру индекса. Вроде бы работает нормально, но иногда результат не совсем тот: Код: char* GetStringItem(const char* _string, int item, const char* delimiter) { char p[SIZE], copy[SIZE], *P; P = StrStr(_string, delimiter); if (P) { P += 1; if (item != 1) return GetStringItem(P, item - 1, delimiter); else { P = StrStr(lstrcpy(copy, _string), delimiter); *P = 0; lstrcpy(p, copy); } } else if (item == 1) lstrcpy(p, _string); else return NULL; return p; } mediachance return p; Низзя - при выходе из функции локальные переменные уничтожаются и указатель повисает в воздухе. Надо либо объявить p[SIZE] как static (тогда функция станет нереентеральной и её нельзя будет вызывать рекурсивно), либо выделять память под возвращаемую строку динамически (тогда в вызывающей программе надо не забыть её освободить во избежание утечек памяти). PS. А почему StrStr, а не strchr? PS. А почему StrStr, а не strchr? Ну это сейчас не принципиально
Ладно, объявлю тогда структуру с полем char[] и сделаю, чтоб функция возвращала экземпляр этого типа, тогда не должно проблем быть... Что-нибудь типа: Код: typedef struct _STRING { char str[SIZE]; } STRING; mediachance Ладно, объявлю тогда структуру с полем char[] и сделаю, чтоб функция возвращала экземпляр этого типа, С тем же успехом можно выделять память под строку в вызывающей программе, и передавать в функцию указатель на неё. Даже с большим - уйдёт неявное копирование при возврате из функции.
Парсинг строк на C++
НЕ пойму принцип работы системы предупреждений IPB
LoadBox
Ночная жизнь Альметьевска
Сорвало шкив на RA7
Рентген-Арт. Цветы. Кисти для ФШ.
Про футбольных хулиганов!!!
C#.NET для WEB
Архив календарей
Windows Server Update Services (WSUS & SUS), часть III
Подскажите Лучшую платную почту!
SAINT-PREUX
Vietcong setup
board - drom - sexnarod - nulled
Архивы форумов - forum-arch.su
RuBoard