46 votes

Quelle est la signification de Bus: erreur 10 en C

Ci-dessous mon code

 #import <stdio.h>
#import <string.h>

int main(int argc, const char *argv[])
{
    char *str = "First string";
    char *str2 = "Second string";
    
    strcpy(str, str2);
    return 0;
}

Il compile très bien sans aucun avertissement ni erreur, mais lorsque j'exécute le code, j'obtiens l'erreur ci-dessous

 Bus error: 10

Qu'est-ce que j'ai raté ?

8voto

meagar Points 85475

str2 pointe vers un tableau de caractères constants alloués statiquement. Vous ne pouvez pas écrire dessus/par dessus. Vous devez allouer dynamiquement de l'espace via la famille de fonctions *alloc

6voto

ouah Points 75311

les littéraux de chaîne ne sont pas modifiables en C

6voto

NPE Points 169956

Votre code tente d'écraser un littéral de chaîne. C'est un comportement indéfini.

Il existe plusieurs façons de résoudre ce problème :

  1. utiliser malloc() puis strcpy() puis free() ;
  2. transformer str en tableau et utiliser strcpy() ;
  3. utilisez strdup() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X