xdude

Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нет необходимости делать strdup для выделения памяти, если исходная строка будет передаваться "как есть", т.е., без изменений. Можно просто все пробельные символы в исходной строке заменить на '\0', и сформировать массив указателей типа char* (т.е. char ** ptr_arr), а эти указатели будут просто ссылаться на начала слов в строке. Есть функция strsep, которая удачно это делает (хотя, вроде бы она принадлежит к стандарту BSD). А вот пример прямо из man-странички к этой функции, как раз в тему, но с фиксированным количеством аргументов: Код: char **ap, *argv[10], *inputstring; for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;) if (**ap != '\0') if (++ap >= &argv[10]) break; | Добавлено: Если поискать в гугле, то можно найти исходный C-файл, реализующий эту функцию (google >> strsep source). В частности, я находил его в исполнении sun microsystems, но видел и другие реализации. Компилируется на любой системе, очень компактная, да и вообще её можно и самому написать при необходимости. Исправлено: пардон, не strspn, а strsep, конечно же 
| Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 20:27 26-04-2009 | Исправлено: xdude, 20:35 26-04-2009 |
|