¿Por qué estoy recibiendo un mensaje de fallo de segmentación?
Usando C, estoy tratando de implementar una función que convierte “word” en “mutated_word” según la clave “string_word”. Por ejemplo, cuando “word” es “HE”, con la clave “QWERTYUIOPASDFGHJKLZXCVBNM”, “mutated_word” debería convertirse en “IT”. Pero sigue dando un fallo de segmentación, no estoy seguro de cómo mejorar.
“`c
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void) {
string word = "HE";
string string_word = "QWERTYUIOPASDFGHJKLZXCVBNM";
char mutated_word[strlen(word)];
<pre><code>for (int i = 0; word[i] != '\0'; i++) {
mutated_word[i] = string_word[(int)word[i] – 65];
}
printf("%s", mutated_word);
</code></pre>
}
“`</string.h></stdio.h></cs50.h>
davy.ai
Solución
El problema ocurre porque el array
mutated_word
no ha sido asignado ningún valor antes de ser utilizado en el bucle for. Por lo tanto, está causando un fallo de segmentación al intentar almacenar valores en él.Para solucionar este problema, puedes inicializar el array
mutated_word
con un carácter nulo\0
para cada índice antes de utilizarlo en el bucle for.El código corregido puede ser el siguiente:
En este código corregido, el array
mutated_word
se inicializa con un carácter nulo\0
para cada índice, y se utilizastrlen(word)+1
para asignar memoria para él. El arraymutated_word
se accede en el bucle for después de la inicialización, lo que resuelve el problema del fallo de segmentación.Además, he cambiado
"
por"
para las declaraciones de cadenas y'
por'
para las declaraciones de caracteres.</string.h></stdio.h></cs50.h>