strtok_s c strtok

strtok_s - ¿Por qué está cambiando strtok su entrada de esta manera?



strtok teradata (3)

Cuando strtok() encuentra un token, cambia el carácter inmediatamente después del token a /0 , y luego devuelve un puntero al token. La próxima vez que lo llame con un argumento NULL , comenzará a ocuparse de los separadores que terminaron el primer token, es decir, después de /0 , y posiblemente más adelante.

Ahora, el puntero original al principio de la cadena aún apunta al principio de la cadena, pero el primer token ahora es /0 -terminado - es decir, printf() piensa que el final de la ficha es el final de la cadena. El resto de los datos todavía está allí, pero ese /0 detiene que printf() muestre. Si usó for -loop para recorrer la cadena de entrada original hasta el número original de caracteres, encontrará que todos los datos siguen allí.

Bien, entiendo que strtok modifica su argumento de entrada, pero en este caso, colapsa la cadena de entrada solo en el primer token. ¿Por qué sucede esto y qué puedo hacer para solucionarlo? (Tenga en cuenta que no estoy hablando de la variable "temp", que debería ser el primer token, sino la variable "entrada", que después de una llamada a strtok se convierte en "esto")

#include <string.h> #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]) { char input[]="this is a test of the tokenizor seven"; char * temp; temp=strtok(input," "); printf("input: %s/n", input); //input is now just "this" }


Debe imprimir el token que recibe de strtok y no preocuparse por la matriz de entrada porque los null serán insertados por strtok . Necesitas llamadas repetidas para obtener todas las fichas:

#include <string.h> #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]) { char input[]="this is a test of the tokenizor seven"; char * temp; temp=strtok(input," "); while( temp != NULL ) { printf("temp is /"%s/"/n", temp ); temp = strtok( NULL, " "); } }


Esto se debe a que strtok inserta nulos en cada separador, por lo que usa llamadas repetidas a strtok para obtener cada token. La cadena de entrada no se puede usar una vez que empiece a usar strtok. No lo "arreglas", así es como funciona.