Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.79
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

strtok_s - C++

02.02.2013, 21:42. Просмотров 10098. Ответов 7
Метки нет (Все метки)

В отличие от strtok в нем есть еще одна переменная context. Для чего она?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2013, 21:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос strtok_s (C++):

Strtok и strtok_s - C++
Доброго времени суток. Есть вот такой код: Info::Info(ifstream &f) { char STR=""; char *delim = "\t"; char *ptr; ...

Функция strtok_s - C++
Чем она отличается от strtok, и что значит третий аргумент в ней () Например, в этом примере // ConsoleApplication2.cpp: определяет...

Операция с функцией strtok_s - C++
#include <iostream> void Token(char *, int &, char *, char *); int main() { using namespace std; char *str = new char; char...

C++ strtok_s ломается в конце строки - C++
Здравствуйте уважаемые программисты, у меня проблема следующего содержания. Когда отдаю строку из файла, т.е. с \n и \0 он на последнем...

Объявление третьей переменной в функции strtok_s - C++
Вот кусок кода: char **context; char *pch = strtok_s(str_text, " ,.", &context); //во втором параметре указаны разделители...

strtok_s где можно посмотреть сам принцип функции - C++
на этой странице http://translate.google.com/translate?langpair=auto%7Cru&u=http://msdn.microsoft.com/en-us/library/ftsafwz3.aspx ...

7
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,472
Записей в блоге: 2
02.02.2013, 21:47 #2
Почитайте тут: http://msdn.microsoft.com/ru-ru/library/ftsafwz3.aspx
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
02.02.2013, 21:57  [ТС] #3
HighPredator, поверьте, я умею пользоваться поиском. Но внятного объяснения не нашел и потыкав палочкой, тоже не все понял.
0
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,873
Записей в блоге: 3
Завершенные тесты: 1
03.02.2013, 01:56 #4
Цитата Сообщение от Kgfq Посмотреть сообщение
Но внятного объяснения не нашел и потыкав палочкой, тоже не все понял.
А по-моему там всё четко написано:
strToken
String containing token or tokens.
strDelimit
Set of delimiter characters.
context
Used to store position information between calls to strtok_s

locale
Locale to use.
И потом идет пример. Выделю из него несколько строк:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    token1 = strtok_s( string1, seps, &next_token1);//Вот эти две строчки особенно интересны.
    token2 = strtok_s ( string2, seps, &next_token2);//Разница видна?
    // While there are tokens in "string1" or "string2"
    while ((token1 != NULL) || (token2 != NULL))
    {
        // Get next token:
        if (token1 != NULL)
        {
            printf( " %s\n", token1 );
            token1 = strtok_s( NULL, seps, &next_token1);
        }
        if (token2 != NULL)
        {
            printf("        %s\n", token2 );
            token2 = strtok_s (NULL, seps, &next_token2);
        }
    }
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 13:59  [ТС] #5
Croessmah, не совсем все понятно. =\

C++
1
2
strtok_s(str, ".", &context); // здесь контекст только заполняется, но из него ничего не берется
strtok_s(NULL, ".", &context); // а здесь и берется и заполняется.
Так?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.02.2013, 15:23 #6
Короче, в чём геморрой. Обычная strtok() не может в обработку нескольких строк одновременно. По историческим причинам (см. время создания Си) у неё там внутри статическая переменная с локальной областью видимости используется для хранения промежуточной позиции в строке (именно поэтому передаётся NULL в качестве индикатора, что продолжать надо с прошлого места). Если мы разбили одну строку частично на токены с помощью strtok(), потом берёмся за другую строку, а потом хотим вернуться к предыдущей, то получаем фигу с маслом, потому что другая строка уже заменила ту статическую внутреннюю переменную на себя. Вот эта версия делает эту переменную всё же локальной, а не глобальной статической, что позволяет одновременно иметь несколько недоразобранных strtok_s() строк.
5
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 15:40  [ТС] #7
~OhMyGodSoLong~, это я и так понимаю. Просто ответь так или не так на мой предыдущий пост
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.02.2013, 16:23 #8
Так.
0
03.02.2013, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2013, 16:23
Привет! Вот еще темы с ответами:

2012 strtok не работает и выдается ошибка, что требуется strtok_s - C++
Проблема в том, что в 2012-ом strtok не работает и выдается ошибка типо нужно strtok_s. Ввожу strtok_s, а это уже абсолютно другая функция,...

Проблема с strtok/strtok_s - Visual C++
Проблема состоит в том что выделеный фрагмент должет отрабатывать по три раза на каждый вызов (цикл в цикле). пробоввал загонять в...

Visual 2012, ошибка при использовании strtok и strtok_s - Visual C++
Подскажите пожалуйста, как исправить ошибку с strtok_s в Visual 2012, выкидывает из программы, я уже и в Свойствах препроцессора изменения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru