«Простое», переносимое, поточно-ориентированное решение, которое не изменяет строку, как подход, использующий strtok()
. Таким образом, приведенный ниже подход может быть применен и к литералам!
#include <stdio.h>
#include <string.h>
int main(void)
{
const char * s = "/user/dir1/file.txt";
for (const char * ps = s, *pe;
pe = strchr(ps, '/'), ps != pe ?printf("%.*s\n", (int) (pe - ps), ps) :0, pe;
ps = pe + 1);
}
Единственное ограничение, с которым сталкивается этот код, состоит в том, что токены в анализируемой строке не должны быть длиннее INT_MAX
символов.