es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Segmentation Fault al separar una cadena de entrada del usuario y después colocarla en una matriz.

Estoy intentando obtener del usuario una cadena de texto con espacios, por ejemplo “abcd12314 asdfg92743 ppoqws21321”, y separarlos para almacenarlos en un arreglo. Pero me está dando un error de segmentación.

“`
#include <stdio.h>
#include <string.h>

int main() {
char string[150];
int i = 0;
fgets(string, sizeof(string), stdin);
char *words = strtok(string, " ");
char *stored[150];

<pre><code>while (words != NULL) {
stored[i++] = words;
words = strtok(NULL, " ");
}

for (i = 0; i < strlen(string); i++) {
printf("%s\n", stored[i]);
}

return 0;
</code></pre>

}
“`</string.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que el bucle que intenta imprimir las palabras almacenadas está iterando sobre la longitud de la cadena de entrada (strlen(string)) en lugar del número de palabras almacenadas en el array stored (i). Esto causará un fallo de segmentación ya que el bucle intentará acceder a memoria fuera de los límites del array.

    Para solucionar esto, reemplace la cabecera del bucle con for (i = 0; i < sizeof(stored)/sizeof(stored[0]); i++) { que iterará sobre el número real de palabras almacenadas en el array stored.

Comments are closed.