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>
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 arraystored
(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 arraystored
.