Strtok возвращает неверные данные - PullRequest
0 голосов
/ 22 января 2019

Я столкнулся со странной проблемой с strtok(), и мне было интересно, не могли бы вы объяснить мне, что происходит не так. Это всего лишь тестовая программа, чтобы увидеть, смогу ли я получить символ `'/` `, назначенный переменной, чтобы потом запустить некоторый код.

(точнее, я хочу узнать, когда пользователь хочет запустить терминальную команду, поэтому, чтобы убедиться, что она одна, я хочу использовать / в качестве первого символа, чтобы я мог system() оставшаяся строка)

Во всяком случае, это мой код.

#include <stdio.h>

int main()
{
char msg[256];
fgets(msg,256,stdin);
char character[256];

character[0] = strtok(msg,"/");
printf("\n%c --> this is the output", character[0]);

return 0;
}

результаты могут отличаться, printf() может печатать ноль, буквы q, a, символ ! или неузнаваемые символы.

/test                                                                                                                                

� --> this is the output

1 Ответ

0 голосов
/ 22 января 2019

Прочитайте справочную страницу . strtok() возвращает указатель, а не char.

Функции strtok() и strtok_r() возвращают указатель на следующий токен или NULL, если токенов больше нет.

Нельзя назначить указатель на переменную char.

Тем не менее, код не делает то, что он должен делать. strtok() возвращает указатель на токен next , без разделителя.

Каждый вызов strtok() возвращает указатель на завершающуюся нулем строку, содержащую следующий токен. Эта строка не включает байт-разделитель. [...]

Вместо этого вы можете посмотреть на strchr().

...