Réinitialiser/Vider une chaîne de caractère ?
Bonsoir,
J'ai un petit soucis pour vider une chaîne de caractères.
je m'explique :
J'ai un char *mot qui sert à stocker une sous chaine extraite d'un char* phrase.
Le problème est que mot est réutilisé dans une boucle donc si la sous-chaine qui est extraite par la suite est moins longue, il restera la fin de la premiere sous-chaine extraite !
exemple : l'utilisateur rentre "13 2 5 6"
je vais extraire consécutivement "13" puis "2" puis "5" puis "6" mais comme mon char* mot n'est pas réinitialisé, ce que je vais en fait avoir, c'est "13" puis "23" puis "53" et enfin "6".
ici mot[0] est modifié mais mot[1] = '3' (sauf à la fin)
Si ça se trouve, c'est simple à résoudre donc vous m'excuserez :roll:
Merci d'avance :wink:
Re: [C][NOOB] Réinitialiser/Vider une chaîne de caractère ?
Citation:
Envoyé par oyomoyo
J'ai un petit soucis pour vider une chaîne de caractères.
Il faut un couteau bien aiguisé... et une pince à linge, parce que ça pue...
Citation:
je m'explique :
J'ai un char *mot qui sert à stocker une sous chaine extraite d'un char* phrase.
Ouch ! Qu'est-ce qu'un char * ?
http://emmanuel-delahaye.developpez....ge=Page5#LXXVI
Citation:
Le problème est que mot est réutilisé dans une boucle donc si la sous-chaine qui est extraite par la suite est moins longue, il restera la fin de la premiere sous-chaine extraite !
exemple : l'utilisateur rentre "13 2 5 6"
je vais extraire consécutivement "13" puis "2" puis "5" puis "6" mais
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#include <stdio.h>
int main (void)
{
char const s[] = "13 2 5 6";
char sa[3];
char sb[3];
char sc[3];
char sd[3];
sscanf (s, "%s %s %s %s", sa, sb, sc, sd);
printf ("'%s' '%s' '%s' '%s'\n", sa, sb, sc, sd);
return 0;
} |
Mais mon petit doigt me dit que c'est plutôt ça que tu veux:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#include <stdio.h>
int main (void)
{
char const s[] = "13 2 5 6";
int a;
int b;
int c;
int d;
sscanf (s, "%d %d %d %d", &a, &b, &c, &d);
printf ("%d %d %d %d\n", a, b, c, d);
return 0;
} |
Et si tu veux de la souplesse:
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
|
#include <stdio.h>
int main (void)
{
char const s[] = "13 2 5 6";
int a[10];
size_t i = 0;
char *pend = s;
while (pend && *pend != 0 && i < sizeof a / sizeof *a)
{
a[i] = (int) strtol (pend, &pend, 10);
i++;
}
{
size_t n = i;
for (i = 0; i < n; i++)
{
printf ("%d ", a[i]);
}
printf ("\n");
}
return 0;
} |