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.

¿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>

Tags:  ,

Answer

  1. Avatar for 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:

    #include <cs50.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
        string word = "HE";
        string string_word = "QWERTYUIOPASDFGHJKLZXCVBNM";
        char mutated_word[strlen(word) + 1]; 
        mutated_word[strlen(word)] = '\0'; // inicializar con el carácter nulo
    
        for (int i = 0; word[i] != '\0'; i++) {
            mutated_word[i] = string_word[(int)word[i] - 65];
        }
    
        printf("%s", mutated_word);
    }
    

    En este código corregido, el array mutated_word se inicializa con un carácter nulo \0 para cada índice, y se utiliza strlen(word)+1 para asignar memoria para él. El array mutated_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>

Comments are closed.