C | Chaîne | question 1

Afficher la discussion

Améliorer l’article

Enregistrer l’article

J’aime l’article

Afficher la discussion

Améliorer l’article

Enregistrer l’article

J’aime l’article

Considérez le code suivant. La fonction monStrcat concatène deux chaînes. Il ajoute tous les caractères de b à la fin de a. La sortie attendue est donc “Geeks Quiz”. Le programme se compile bien mais produit une erreur de segmentation lors de son exécution.

#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;

}

Lequel des changements suivants peut corriger le programme afin qu’il imprime “Geeks Quiz” ?
(UN) char *str1 = “Geeks” ; peut être changé en char str1[100] = “Geks” ;
(B) char *str1 = “Geeks” ; peut être changé en char str1[100] = “Geks” ; et une ligne a[m+n-1] = ‘\0’ est ajouté à la fin de myStrcat
(C) Une ligne un[m+n-1] = ‘\0’ est ajouté à la fin de myStrcat
(RÉ) Une ligne ‘a = (char *)malloc(sizeof(char)*(strlen(a) + strlen(b) + 1)) est ajoutée au début de myStrcat()

Réponse: (UN)
Explication: Dans le programme ci-dessus « Geeks » et « Quiz » stockés dans un emplacement en lecture seule, mais la ligne a[m+i]=b[i] essaie d’écrire une mémoire en lecture seule. Le problème peut être résolu en stockant str dans un segment de pile inscriptible. Pour plus de détails, voir ci-dessous. https://www.geeksforgeeks.org/storage-for-strings-in-c/
Quiz de cette question

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *