Bonjour
j'ai le code suivant qui compile bien sous Linux et mac,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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