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