bonjour

nous avons actuellement tous nos programmes dévelopés en C + SQL sur une plateforme UNIXWARE.
nous envisageons le passage sur une plateforme LINUX

nous sommes donc en train de tout transférer et recompiler sous linux pour vérifier que tout fonctionnera.

au niveau compil, même si le compilateur laisse passer moins de choses, on s'en sort.
par contre nous avons un gros souci sur des appels de fonctions (interne ou externes) qui manipulent des chaines de caractères dans le cas où on appelle ces fonctions en passant une valeur "en dur" entre double quotes. Si dans la fonction on vient modifier la chaine de caractère çà fait un segmentation fault.

exemple
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
//CODE QUI FONCTIONNE
main()
{
   char wvar[501];
   strcpy(wvar,"JAIPLUSDEDIXCARACTERES");                   
   printf("\navant appel fonction_interne wvar=%s\n",wvar); 
   fonction_interne(wvar);                                  
   printf("\napres appel fonction_interne wvar=%s\n",wvar);
}
 
static fonction_interne(chaine)                      
char chaine[501];                                    
{                                                    
    char chaine2[501];                                   
    printf("\ndebut fonction interne\n");
    printf("\nchaine=%s",chaine);                        
    if (strlen(chaine)>10)                               
    {                                            
        strncpy(chaine2,chaine,10);chaine2[10]='\0'; 
        strcpy(chaine,chaine2);                      
     }                                            
    printf("\nchaine=%s",chaine);                        
}
//FIN CODE
// A L'exécution :
avant appel fonction_interne wvar=JAIPLUSDEDIXCARACTERES

debut fonction interne

chaine=JAIPLUSDEDIXCARACTERES
chaine=JAIPLUSDED
apres appel fonction_interne wvar=JAIPLUSDED
PAR CONTRE SI J'APPELLE LA FONCTION EN FAISANT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
fonction_interne("JAIPLUSDEDIXCARACTERES");
j'ai à l'exécution :
debut fonction interne
Segmentation fault (core dumped)
AU MOMENT de faire le printf dans la fonction interne çà plante.
et si j'enlève le printf, çà va planter au moment du strcpy de chaine2 vers chaine

quelqu'un a-t-il déjà rencontré ce problème ?

ps : le code que j'ai donné ne veut pas dire grand chose, mais c'était pour simplifier l'explication de mon problème !