Fonction substr en C

julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 7 juin 2007 à 12:51
ranzi Messages postés 2 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 17 août 2010 - 17 août 2010 à 15:58
Bonjour,
j'ai codé cette fonction, sensée être l'équivalent de string::substr(...) en C :

char * StrSub(const char *s, int pos, int len)
{
    char *ps = (char*)s;
    static char rs[256];
    char *prs = rs;
    int strLen = strlen(s);
   
    if(pos>=strLen || len==0) return NULL;
    ps+=pos;

    if(len==-1 || len>(strLen-pos)) len=strLen-pos;
   
    int i=0;
    while(i<len && *ps!='\0')
    {
        *prs=*ps;
        prs++; ps++;
        i++;
    }
    *prs='\0';
   
    return rs;
}

Elle semble marcher seulement elle présente des dysfonctionnement, exemple :

char *s="une phrase";
cout << StrSub(s, 0, 5) <<endl<<StrSub(s, 5, -1);

qui affichera deux fois "une p", au lieu de "une p" puis "hrase" .

Je ne comprends pas l'erreur, et comme je ne maitrise pas tout à fait les pointeurs, je demande à un oeil avisé de bien vouloir me dire où ca coince. Merci bcp

17 réponses

cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
7 juin 2007 à 14:00
ce fonctionne ok en C si du fait

printf("%s\n",  StrSub(s, 0, 5);
printf("%s\n",  StrSub(s, 5, -1);

Mais pas en C++ du fait de ton buffer static dans ta fonction.....
0