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

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

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



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

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

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

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

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

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


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