Используя strtok () в цикле в C?

Я использовал MVVM в последнее время на нескольких различных проектах Silverlight, и он работал действительно хорошо, я определенно рекомендовал бы его. сообщение Jonas является великолепным местом для запуска, я недавно имею , занес в блог на моих событиях MVVM также и создал действительно простое решение для демонстрации основных точек соприкосновения.

13
задан Jonathan Leffler 30 September 2017 в 20:51
поделиться

3 ответа

Да, strtok () , действительно, использует некоторую статическую память для сохранения своего контекста между вызовами. Используйте вместо этого реентерабельную версию strtok () , strtok_r () или strtok_s () , если вы используете VS (идентично strtok_r () ).

У него есть дополнительный аргумент контекста, и вы можете использовать разные контексты в разных циклах.

char *tok, *saved;
for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved))
{
    /* Do something with "tok" */
}
21
ответ дан 1 December 2019 в 22:23
поделиться

strtok is using a static buffer. In your case you should use strtok_r. This function is using a buffer provided by the user.

1
ответ дан 1 December 2019 в 22:23
поделиться

WayneAKing разместил альтернативу в Центре разработчиков Microsoft.

Цитируя его:

Зайдите сюда

http://cpp.snippets.org/code/

и загрузите этот файл

stptok.c Улучшенная разметка функция

Вы также можете скачать необходимые заголовочные файлы с того же сайта.

Это модифицированная версия strtok который помещает проанализированные токены (подстроки) в отдельном буфере. Ты должен иметь возможность изменить его на удовлетворить ваши потребности.

  • Уэйн

П.С. - Обратите внимание, что эти файлы могут находиться в Формат * nix с учетом конца строки. т.е. - только 0x0A, а не 0x0D 0x0A

Это альтернатива, если в вашей среде нет библиотек Microsoft.

0
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: