C | String | Pregunta 1 – Part 7

Considere el siguiente código. La función myStrcat concatena dos strings. Añade todos los caracteres de b al final de a. Entonces, el resultado esperado es «Geeks Quiz». El programa compila bien pero produce una falla de segmentación cuando se ejecuta.

#include <stdio.h>
  
void myStrcat(char *a, char *b)
{
    int m = strlen(a);
    int n = strlen(b);
    int i;
    for (i = 0; i <= n; i++)
       a[m+i]  = b[i];
}
  
int main()
{
    char *str1 = "Geeks ";
    char *str2 = "Quiz";
    myStrcat(str1, str2);
    printf("%s ", str1);
    return 0;
}

¿Cuál de los siguientes cambios puede corregir el programa para que imprima «Geeks Quiz»?
(A) char *str1 = “Geeks”; se puede cambiar a char str1[100] = “Geeks”;
(B) char *str1 = “Geeks”; se puede cambiar a char str1[100] = “Geeks”; y se agrega una línea a[m+n-1] = ‘\0’ al final de myStrcat
(C) Se agrega una línea a[m+n-1] = ‘\0’ al final de myStrcat
(D ) Se añade una línea ‘a = (char *)malloc(sizeof(char)*(strlen(a) + strlen(b) + 1)) al principio de myStrcat()

Respuesta: (A)
Explicación:En el programa anterior, «Geeks» y «Quiz» se almacenan en una ubicación de solo lectura, pero la línea a[m+i]=b[i] intenta escribir una memoria de solo lectura. El problema se puede resolver almacenando str en un segmento de pila grabable. Para obtener más detalles, consulte lo siguiente. https://www.geeksforgeeks.org/storage-for-strings-in-c/
Prueba de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *