strtok_r
ставит нулевой символ в разные места входной строки при разборе. Исходная строка восстанавливается только после того, как strtok_r
возвращает NULL
.strtok/strtok_r quit разбор в середине
Что делать, если мне нужно извлечь токен где-то рядом с началом длинной строки? Если я покину цикл, входная строка останется сломанной. Я мог бы попытаться восстановить разделитель вручную, но я не знаю, является ли это последним токеном. Проблема в том, что значение saveptr
не задокументировано.
void extract_nth_token(char *res, size_t reslen, char *str, const char *delim, int n) {
int i;
char *token;
char *save_ptr;
token = strtok_r(str, delim, &save_ptr);
for(i = 0; token != NULL; i++) {
token = strtok_r(NULL, delim, &save_ptr);
if (i == n) {
snprintf(res, reslen, "%s", token);
/* token[strlen(token)] = delim[0]; */
/* break; */
}
}
}
'Проблема заключается в том, что saveptr значение не задокументировано. 'какое' значение' вы ищете? –
Сделайте копию строки и используйте ее. – Barmar
@SouravGhosh значение, чтобы сказать мне, является ли это последним токеном – basin