Execution sous mac différente de celle sous Linux
Bonjour
j'ai le code suivant qui compile bien sous Linux et mac,
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TAILLE_CHAINE 27
#define TAILLE_SOUS_CHAINE 26
void decalage(const char chaine[TAILLE_CHAINE], int iteration, char chaineDeRetour[TAILLE_CHAINE])
{
char a[TAILLE_SOUS_CHAINE];
char chaineCpy[TAILLE_CHAINE];
if(iteration > 0)
{
strncpy(a,chaine,TAILLE_SOUS_CHAINE-1);
sprintf(chaineCpy,"%c%s",chaine[TAILLE_SOUS_CHAINE-1],a);
decalage(chaineCpy, iteration-1,chaineDeRetour);
}
else
{
strncpy(chaineDeRetour, chaine, TAILLE_CHAINE-1);
}
}
int main(void)
{
printf("start");
char chaine[TAILLE_CHAINE] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\0";
char chaineN[TAILLE_CHAINE] = "";
printf("chaine = %s\n", chaine);
decalage(chaine,1,chaineN);
printf("1 chaineN = %s\n", chaineN);
decalage(chaine,2,chaineN);
printf("2 chaineN = %s\n", chaineN);
decalage(chaine,10,chaineN);
printf("10 chaineN = %s\n", chaineN);
decalage(chaine,26,chaineN);
printf("26 chaineN = %s\n", chaineN);
return 0;
} |
or lors de l'execution sous mac j'ai l'erreur :
startchaine = ABCDEFGHIJKLMNOPQRSTUVWXYZ
1 chaineN = ZABCDEFGHIJKLMNOPQRSTUVWXY
Abort trap: 6
mais si le code est:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TAILLE_CHAINE 27
#define TAILLE_SOUS_CHAINE 26
void decalage(const char chaine[TAILLE_CHAINE], int iteration, char chaineDeRetour[TAILLE_CHAINE])
{
char a[TAILLE_SOUS_CHAINE];
char chaineCpy[TAILLE_CHAINE];
if(iteration > 0)
{
strncpy(a,chaine,TAILLE_SOUS_CHAINE-1);
sprintf(chaineCpy,"%c%s",chaine[TAILLE_SOUS_CHAINE-1],a);
decalage(chaineCpy, iteration-1,chaineDeRetour);
}
else
{
printf(".");
strncpy(chaineDeRetour, chaine, TAILLE_CHAINE-1);
}
}
int main(void)
{
printf("start");
char chaine[TAILLE_CHAINE] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\0";
char chaineN[TAILLE_CHAINE] = "";
printf("chaine = %s\n", chaine);
decalage(chaine,1,chaineN);
printf("1 chaineN = %s\n", chaineN);
decalage(chaine,2,chaineN);
printf("2 chaineN = %s\n", chaineN);
decalage(chaine,10,chaineN);
printf("10 chaineN = %s\n", chaineN);
decalage(chaine,26,chaineN);
printf("26 chaineN = %s\n", chaineN);
return 0;
} |
le retour est correct:
startchaine = ABCDEFGHIJKLMNOPQRSTUVWXYZ
.1 chaineN = ZABCDEFGHIJKLMNOPQRSTUVWXY
..2 chaineN = YZABCDEFGHIJKLMNOPQRSTUVWX
..........10 chaineN = QRSTUVWXYZABCDEFGHIJKLMNOP
..........................26 chaineN = ABCDEFGHIJKLMNOPQRSTUVWXYZ
pourquoi?
merci bien