Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2015, 19:16   #1
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 114
По умолчанию Си. Strtok свел с ума

Здравствуйте!

То ли я дурак, то ли лыжи не едут. Прошу просвятить окончательно и безповоротно. В общем, ситуация

Код:
const char *msg="{ \"key\":value, \"key2\":value2}"; //дада, после открывающей скобки есть пробел
const char *delim="key2\":";
char          *dest, *saveptr;

dest=strtok_r((char *)msg, delim, &saveptr);
printf("Токен %s\t остаток строки %s\n, dest, saveptr);
Что я надеюсь увидеть в dest при печати - { "key":value, "
Что я вижу в действительности - {
То есть, strtok забивает болт на мою строку разделителей и, встречая пробел, отрезает токен

Мат. Часть неоднозначна - кто-то говорит, что strtok расматривает КАЖДЫЙ символ в строке delim как разделитель, а кто-то, мол, delim ЦЕЛИКОМ - это разделитель.

При обоих подходах для меня остается загадкой, почему помимо моей строки delim strtok воспринимает разделителем пробел.
Помогите, иначе начну рвать волосы на себе
Bayern_M вне форума Ответить с цитированием
Старый 03.12.2015, 19:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
The strtok function finds the next token in strToken.The set of characters in strDelimit specifies possible delimiters of the token to be found in strToken on the current call
У вас есть разделитель ", вот вам и возвращается первый токен - все до ", т.е. {
p51x на форуме Ответить с цитированием
Старый 03.12.2015, 19:50   #3
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 114
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У вас есть разделитель ", вот вам и возвращается первый токен - все до ", т.е. {
То есть разбить строку по delim целиком не представляется возможным?
Спасибо большое надо же так затупить. Думал кавычки после слеша заигнорю.
Bayern_M вне форума Ответить с цитированием
Старый 03.12.2015, 19:53   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
const char *msg
А-а-а... Э-э-э... Точно тебе константа нужна? Не знаю как strtok_r, но strtok изменяет входящую строку, всмысле указатель на ее начало двигает. А у тебя она константой...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
strtok Pein95 Общие вопросы C/C++ 0 09.02.2013 22:48
strtok Matr1x Общие вопросы C/C++ 5 18.02.2012 20:34
strtok Lotles Общие вопросы C/C++ 4 21.12.2011 21:04
strtok... Joe_Tribbiani Общие вопросы C/C++ 0 02.05.2010 15:52
си. strtok. RZMTZM Общие вопросы C/C++ 2 05.01.2010 12:59