# erreur "abort trap" xcode



## benj54 (9 Novembre 2011)

Bonjour, voilà j'ai un programme en C où je souhaite concaténer une chaine de caractère, et mon problème c'est que lors de ma compilation j'ai une erreur "abort trap" que je n'arrive pas a résoudre, alors que lorsque je compile sous windows cela fonctionne correctement.

Voilà mon bout de code : 


```
char ligne[256];  
    char* champ;
    int compteur_ligne = 0;
    int compteur_decoup = 0;
    int i = 0;
    char nomFichier[] = "Fichier/F";
    char numeroFichier[] = "a";
   
   sprintf(numeroFichier, "%d", i);
   printf("numFichier : %s\n", numeroFichier);
   strcat(nomFichier, numeroFichier);
        
   printf("nomFichier : %s\n", nomFichier);
```

Merci d'avance


----------



## Céroce (9 Novembre 2011)

```
char numeroFichier[] = "a";
```
2 octets sont réservés pour stocker les 1 caractère + 1 octet nul.


```
sprintf(numeroFichier, "%d", i);
```
Comme i vaut zéro, la chaîne stockée dans numeroFichier va mesurer 2 octets (1 caractère + 1 octet nul). Pour l'instant, c'est bon.


```
char nomFichier[] = "Fichier/F";
```
10 octets sont réservés pour stocker les 9 caractères + 1 octet nul.


```
strcat(nomFichier, numeroFichier);
```
Là, tu demandes de stocker la chaîne "Fichier/F0" qui mesure 11 octets alors que tu n'as réservé que 10 octets. Tu écrases la pile, donc ça plante !

Ça fonctionne sous Windows par chance uniquement.


----------



## Nyx0uf (9 Novembre 2011)

Donc tu peux te documenter sur :

- Les pointeurs
- Les tableaux
- Les chaînes de caractères
- L'allocation dynamique de mémoire

Sur Windows t'as compilé avec quoi ? Si c'est avec Visual Studio j'assume que le _canari_ à empêcher le crash.


----------



## benj54 (9 Novembre 2011)

D'accord, merci de vos réponses, sous windows je compile avec cygwin


----------



## Céroce (10 Novembre 2011)

cygwin n'est pas un compilateur. Tu veux dire gcc ?


----------



## benj54 (11 Novembre 2011)

Oui voilà avec gcc pardon


----------

