Intereting Posts
как взять целые числа в качестве аргументов командной строки? проверка NULL перед вызовом бесплатного Напишите свою собственную реализацию математической функции пола, C Я знаком с Ruby / DL, но не уверен, как использовать вызовы функций C с указателями для возвращаемых параметров Как написать функцию сравнения для qsort из stdlib? CCCOMSTR / LINKCOMSTR для SharedLibrary в SConscript не будет работать как построить спиральную квадратную матрицу с помощью рекурсии? Использование распознавателя имен resolv.h с IPv6 Как оценивается оператор сдвига в C? что глобально относительно переменной clsStr, которая является «clsStr = (* env) -> NewGlobalRef (env, cls)»? не удалось подключиться к библиотеке fftw3 libxml в stdout при использовании библиотеки fastcgi Не удается подключиться к уже активному экрану через систему () в c Как указать активные порты и процессы, используя их в Linux, код C CUDA Матричные размножения разрываются для больших матриц

получить последний токен строки в C

то, что я хочу сделать, дана строка ввода, которую я не буду знать, это размер или количество токенов, можно распечатать последний токен.

например:

char* s = "some/very/big/string"; char* token; const char delimiter[2] = "/"; token = strtok(s, delimiter); while (token != NULL) { printf("%s\n", token); token = strtok(NULL, delimiter); } return token; 

и я хочу, чтобы мое возrotation было

строка

но я получаю (null). Любые обходные пути? Я искал в Интернете и не могу найти ответ на этот вопрос. По крайней мере, для языка программирования C.

Если вы обозначаете определенный символ, т. Е. '/' В вашем примере, вам вовсе не нужно токенизировать строку: вызовите strrchr чтобы найти позицию последнего '/' , и добавьте 1 к результирующему указателю, чтобы пропустить разделитель, например:

 char *s = "some/very/big/string"; char *last = strrchr(s, '/'); if (last != NULL) { printf("Last token: '%s'\n", last+1); } 

Demo.

Просто используйте другую переменную, чтобы сохранить последний токен, прежде чем он получит значение null

 char s[] = "some/very/big/string"; char * token, * last; last = token = strtok(s, "/"); for (;(token = strtok(NULL, "/")) != NULL; last = token); printf("%s\n", last);