Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Токенизация с помощью strtok_s / 8 сообщений из 8, страница 1 из 1
01.03.2014, 23:04
    #38576190
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
Здравствуйте, уважаемые! Возникла странного рода проблема. Пытаюсь токенизировать строку, и валюсь с ошибками доступа к памяти. Вот такой вот кодес:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
void _test_tok(char * str) {
	char * context = NULL;
	char * token = NULL;
	system("pause");
	token = strtok_s(str, " ", &context);

	while (token != NULL) {
		if (!strcmp(token, "%i")) {
			printf("int val");
		}
		else if (!strcmp(token, "%f")) {
			printf("float val");
		}
		else if (!strcmp(token, "%s")) {
			printf("str val");
		} system("pause");

		token = strtok_s(NULL, " ", &context);
	}
}



Так вот вызываемс:

Код: plaintext
1.
_test_tok("%i %f %s %i");



Собсна, валится на попытке получения первого токена. Вроде всё по мануалам, ума не приложу, где ошибка затесалась, надеюсь на вашу помощь.
...
Рейтинг: 0 / 0
01.03.2014, 23:29
    #38576200
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
DoSOfRedRiverВроде всё по мануалам
Не всё. Компилятор должен был тебя предупредить, что пихать const char* туда где ожидается
char* - очень плохая идея.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.03.2014, 23:49
    #38576211
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
strtok_s модифицирует первый аргумент

Код: plaintext
1.
2.
char str[]="%i %f %s %i";
_test_tok(str);



будет работать
...
Рейтинг: 0 / 0
01.03.2014, 23:51
    #38576212
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
Dimitry Sibiryakov,

Да я и указатель пробовал передавать, а результат тот же.
...
Рейтинг: 0 / 0
01.03.2014, 23:55
    #38576215
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
Изопропил,

Действительно работает. А разве нельзя безболезненно изменять указатель на char? Можно как нибудь кодес модифицировать так, чтобы он работал на вызовах с const char*, вроде так:

Код: plaintext
1.
_test_tok("%i %f %s %i");

?
...
Рейтинг: 0 / 0
02.03.2014, 00:19
    #38576222
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
DoSOfRedRiverА разве нельзя безболезненно изменять указатель на char?
ты меняешь не указатель, а память по адресу куда он собственно указывает

скопируй аргумент и передавай в strtok_s копию
...
Рейтинг: 0 / 0
02.03.2014, 09:54
    #38576263
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
...
Рейтинг: 0 / 0
02.03.2014, 15:54
    #38576345
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Токенизация с помощью strtok_s
Всё заработало после копирования аргумента. Спасибо, господа, что помогли разобраться в ситуации!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Токенизация с помощью strtok_s / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]