comment vider une chaine de caractère ?
et j'ai deja recercher sur le forum mais les facons donnés ne marche pas avec moi donc si il y en a d'autre ...
Version imprimable
comment vider une chaine de caractère ?
et j'ai deja recercher sur le forum mais les facons donnés ne marche pas avec moi donc si il y en a d'autre ...
Tu pourrais nous donner un bout de code pour qu'on voit comment tu as procédé.
c'est un exemple, vous allez dire que ca sert a rien mais c juste un simple exemple, donc a vous maintenant de me dire comment je pourrais faire...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 main { int i; char question[10][500]; for(i=0;i<=10;i++) { gets(question[i]); } getch(); for(i=0;i<=10;i++) { \\ici vider la chaine de caractère, comment je ne sais pas vu que je vous le demande.. } }
Je te propose ça:
qui renvoie:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv){ char *s; s = (char*) malloc(5 * sizeof(char)); s = "bacd"; printf("%s\n", s); s = "\0"; printf("%s\n", s); s = "bacd"; printf("%s\n", s); return 0; }
bacd
//chaine vide
bacd
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv){ char *s; \\ a quoi sert cette ligne? :oops: s = (char*) malloc(5 * sizeof(char)); \\ a quoi sert cette ligne? :oops: s = "bacd"; printf("%s\n", s); s = "\0"; printf("%s\n", s); return 0; }
Code:
1
2 char *s; //declare un pointeur de charactères s = (char *) malloc(5 * sizeof(char)); //alloue la mémoire necessaire pour la chaine de caractères
Je tiens à préciser : Driden alloue de la mémoire dans son exemple, mais ce n'est pas du tout nécessaire pour vider une chaîne. Vider une chaîne est faisable en mettant à 0 le premier caractère.
Donc, pour gaut, le code à utiliser est :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 main { int i; char question[10][500]; for(i=0;i<=10;i++) { gets(question[i]); } getch(); for(i=0;i<=10;i++) { question[i][0] = '\0'; /* voici la réponse à ta question */ } }
Un chaîne de caractères se termine avec un zéro.
Donc pour la vider, il suffit que son premier caractère soit zéro.
N'utilises pas gets mais fgets qui permet de spécifier une taille max et d'éviter de déborder.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 main { int i; char question[10][500]; for(i=0;i<=10;i++) { gets(question[i]); } getch(); for(i=0;i<=10;i++) { question[i]=0; } }
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc008.html#q_7
Driden>
Pour le malloc, il faut le free qui va avec...
D'autant plus que ton malloc ne sert à rien ...
tu veux sûrement faire :Citation:
char *s;
s = (char*) malloc(5 * sizeof(char));
s = "bacd";
strcpy( s, "bacd" );
La mémoire allouée juste avant est perdue sinon.
"" suffit, et tu veux certainement faire s[0]=0;Citation:
printf("%s\n", s);
s = "\0";
T'as du trompé c'est pas 0 mais '\0' qui le caractère de fin de chaine.
8OCitation:
Envoyé par Driden
Il a sûrement mis un zéro (et pas un O sinon cela n'aurait pas compilé), et il se trouve que, si si, '\0' == 0 ;) Ceci dit, '\0' est mieux :lun:
Je me suis aperçu que j'avais effectivement remplacé 0 par O, je viens de rectifier. :wink:Citation:
Envoyé par Anomaly
Juste pour une bonne compréhension:
esque ca marche avec mot = ""; ?????
Non, tu dois passer un strcpy.Citation:
Envoyé par Walm
Faisons simple :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 main { int i; char question[10][500]; for(i=0;i</*=*/10;i++) // OUPS !!!! Tu vas sortir de ton tableau !! { gets(question[i]); } getch(); memset(question, 0, sizeof(question)); // Fonctionne car question a été alloué statiquement... // En cas d'allocation dynamique, faire memset(question, 0, 10 * 50 * sizeof(char)) }