Título: Extraña asignación en un array con -1 Publicado por: kutcher en 28 Julio 2014, 05:14 am Buenas, estoy tratando de implementar mi propia función strtok y buscando por la
red he encontrado un método bastante curioso el cual utiliza el numero negativo -1 como indice en un array de caracteres para asignarle el carácter nulo En consecuencia extrañamente obtienes el primer token en el puntero llamado token, cosa que no entiendo como sucede aquí el código: Código
Es la versión corta la modifique un poquito para exponer la parte que no entiendo Título: Re: Extraña asignación en un array con -1 Publicado por: CalgaryCorpus en 28 Julio 2014, 06:24 am Genéricamente, la notacion que usa el parentesis cuadrado, como
p[ entero ] es igual a * ( p + entero ) por lo que puntero[ -1 ] es igual a *( puntero - 1 ) El codigo que muestras mueve a "s" un lugar hacia adelante unas lineas antes por lo que si se quiere acceder a posiciones previas el -1 tiene (algo de) sentido. Título: Re: Extraña asignación en un array con -1 Publicado por: eferion en 28 Julio 2014, 11:30 am Código
Es equivalente a: Código
Es decir, asigno a 'c' el valor apuntado por 's' y después hago que 's' apunte al siguiente carácter. Código
Si 'c' se corresponde con el delimitador, entonces tengo que eliminar ese delimitador... pero claro, el único puntero que tengo, 's', está apuntando al siguiente carácter... bueno, pues retrocedo una posición y listo. Título: Re: Extraña asignación en un array con -1 Publicado por: kutcher en 28 Julio 2014, 16:23 pm por lo que puntero[ -1 ] es igual a *( puntero - 1 ) Viéndolo de esa forma todo tiene mas sentido, solo una ultima consulta luego de esta asignación la cadena s queda modificada no? Título: Re: Extraña asignación en un array con -1 Publicado por: rir3760 en 28 Julio 2014, 17:00 pm luego de esta asignación la cadena s queda modificada no? Si. El propósito de la función es buscar un único carácter y sustituirlo con un cero, si ello sucede se retorna el primer parámetro, caso contrario se retorna NULL.A esa función se deberían realizar algunos cambios ya que si se busca un solo carácter no tiene caso que el segundo parámetro sea un puntero y ya que las variables "c" y "sc" (deberían ser de tipo char, no hay necesidad de declararlas con el tipo int) solo "pasan la cubeta" se pueden eliminar. Por ultimo no tiene en cuenta el caso donde el primer parámetro es una cadena nula. Quedaría así: Código
Un saludo Título: Re: Extraña asignación en un array con -1 Publicado por: kutcher en 28 Julio 2014, 17:51 pm Si. El propósito de la función es buscar un único carácter y sustituirlo con un cero, si ello sucede se retorna el primer parámetro, caso contrario se retorna NULL. De ser así, porque al asignar la cadena s a una variable estática los caracteres posteriores al carácter nulo son asignados de igual manera a tal variable: Código
Título: Re: Extraña asignación en un array con -1 Publicado por: Blaster en 28 Julio 2014, 19:39 pm De ser así, porque al asignar la cadena s a una variable estática los caracteres posteriores al carácter nulo son asignados de igual manera a tal variable: Como ya te han indicado el puntero s al encontrarse el primer carácter delimitador ya apunta al siguiente carácter a partir del cual realizas la correspondiente asignación hasta el siguiente carácter nulo. Título: Re: Extraña asignación en un array con -1 Publicado por: rir3760 en 28 Julio 2014, 21:18 pm De ser así, porque al asignar la cadena s a una variable estática los caracteres posteriores al carácter nulo En tu primer mensaje la función no tiene una variable con clase de almacenamiento estático, si actualizaste la función y te surge una duda por favor publica el código fuente completo.Y si te interesa el tema de implementaciones propias de strtok puedes revisar varias de ellas en la discusión CRT personalizada (http://foro.elhacker.net/buscador-t386470.0.html). Un saludo Título: Re: Extraña asignación en un array con -1 Publicado por: kutcher en 28 Julio 2014, 21:41 pm por favor publica el código fuente completo. Disculpa, este es el código original que he encontrado: Código
Creo que es la implementación de la función estándar strtok |