#include #include int main(){ char path[] = "/fs/lost+found"; char* temp; temp = strtok(path,"lost+found"); while(temp != NULL){ printf("\n %s \n",temp); temp = strtok(path,"lost+found"); } return 0; }
Quería extraer la cadena perdida + encontrada. El progtwig anterior entra en un bucle infinito e imprime el “/” que está antes del delimitador “perdido + encontrado”
[root @ rs] # ./a.out Fallo de segmentación
Cometiste dos errores (como puedes descubrir fácilmente desde aquí ).
strtok()
toma como segundo argumento un delimitador . En su caso, este delimitador no se lost+found
sino razonablemente /
.
dentro del bloque while
, el primer parámetro de la función strtok
debe ser NULL
para que la función continúe explorando donde finalizó una llamada exitosa anterior a la función.
Finalmente, debe usar strcmp()
para descubrir si el token procesado es la cadena que está buscando.
Asi que:
... while (temp != NULL) { if (strcmp("lost+found", temp) == 0) printf ("%s\n", temp); // found temp = strtok (NULL, "/"); } ... // not found
del hombre 3 strtok:
char * strtok (char * str, const char * delim);
La función strtok () analiza una cadena en una secuencia de tokens. En la primera llamada a strtok (), la cadena a analizar debe especificarse en str. En cada llamada subsiguiente que deba analizar la misma cadena, str debe ser NULL.
Fijar:
#include #include int main(){ char path[] = "/fs/lost+found"; char* temp; temp = strtok(path,"/"); // ^^^ different delimiter do { printf("%s\n", temp); temp = strtok(NULL, "/"); // ^^^^ each subsequent call to strtok with NULL as 1st argument } while (temp != NULL); return 0; }
Imprimirá los tokens “fs” y “lost + found”. Puede agregar algunas comprobaciones si temp tiene actualmente el valor que está buscando y luego puede almacenar en otra variable.
El argumento delim especifica un conjunto de caracteres que delimitan los tokens en la cadena analizada.
El segundo argumento que ha proporcionado para strtok proporciona un conjunto de delimitadores para tokenizar la cadena dada, no para extraer una cadena particular
Utilizar strstr
temp = strstr(path,"lost+found");
Esto devuelve un puntero a la subcadena que está buscando
No puede cambiar una cadena literal, y strtok()
modificará la cadena en la que está trabajando.