Les chaines de caractères dans C

hzocm Messages postés 8 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 28 mai 2007 - 30 mai 2005 à 15:17
hzocm Messages postés 8 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 28 mai 2007 - 30 mai 2005 à 16:42
Bonjour,



Je voudrais copier un fragment de la chaine A, comment faire??

ex: A = hello, je suis une chaine

je veux copier de la position 3 à 5 --> j'aurai donc: "lo,"



******

7 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 mai 2005 à 15:30
char chaine[] = "hello"; chaine de base

pour copier de la position i à la position j dans une chaine c:

strncpy(c, chaine + i, j - i);

par exemple chaine+3 pointe vers la chaine "lo"
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
30 mai 2005 à 15:32
Ce que tu pe faire, c' un truc du genre :

int a,b;
char chaineB[strlen(chaineA)];
for (a=3, b=5; a < b;a++) chaineB[strlen(chaineB)+1] = chaineA[a];
chaineB[strlen(chaineB)+1] = '\0';

Du moins c un truc de ce genre. Après j si ça se trouve y a déjà une fonction qui est faite expret ^^

Have Fun ...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 mai 2005 à 15:39
char chaineB[strlen(chaineA)];

Tu ne peux pas faire ca, quand tu crée un tableau comme ca (local), tu
dois donner une constante pour spécifier la taille. C'est vrai que gcc
laisse passer ca mais sous vs ca n'ira pas
0
hzocm Messages postés 8 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 28 mai 2007
30 mai 2005 à 15:51
j'ai fait ça:



char* lireRaison(char* anEvent){

char* tmp;

char a[1024];

char b[1024];

int n;



tmp = (char*) malloc (128);



strcpy(a,strstr(anEvent,"GTT_")); // la 1ere caractère

strcpy(b,strstr(a,"\n")); // la après-dernière caractère

n = strlen(a) - strlen(b);



strncpy(tmp,a,n);

printf("tmp =%s\n",tmp);

return tmp;

}


Le problème: Il ajoute par fois, quelques choses à la fin de
tmp!!!!!! Je ne comprend pas. C'est peut être un problème
d'adresse??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hzocm Messages postés 8 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 28 mai 2007
30 mai 2005 à 16:13
Je fait ça et il donne le bon résultat:



char* lireRaison(char* anEvent){

char* tmp;

char a[1024];

char b[1024];

int n;

int i;



tmp = (char*) malloc(256);

strcpy(a,strstr(anEvent,"GTT_")); // 1ere position

strcpy(b,strstr(a,"\n"));// après dernière position

n = strlen(a) - strlen(b);



strncpy(tmp,a,n);

strcat(tmp,"\0");

strcat(tmp,"\0"); //*



printf("tmp =%s\n",tmp);

return tmp;

}



Par contre, je comprend pas du tout, pourquoi quand je ne mets pas la
lgine (*), il ajoute des fois des caractères à la fin de ma
variable!!!!!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 mai 2005 à 16:24
Il me semble que strcnpy ajoute automatiquement un zero terminal, mais
c'est à vérifier. Vu ton résultat, on dirati que ce n'est pas le cas.
Tu peux alors faire:

...

strncpy(tmp,a,n);

*(tmp + n + 1) = 0;

...
0
hzocm Messages postés 8 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 28 mai 2007
30 mai 2005 à 16:42
enfait, le premier
code ne marche pas, il donne des mêmes erreurs lorsqu'on le met dans un
autre prog. (Je comprend trictement rien)

ceci marche:



char* lireRaison(char* anEvent){

char* tmp;

char a[1024];

char b[1024];

int n;



tmp = (char*) malloc(256);

strcpy(a,strstr(anEvent,"GTT_"));

strcpy(b,strstr(a,"\n"));

n = strlen(a) - strlen(b);



strncpy(tmp,a,n);

*(tmp+n) = 0;

return tmp;

}





Conclusion: j'aime pas C, java est bc mieux :((
0
Rejoignez-nous