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 ...
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 : 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 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 : 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 #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 : 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 #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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : 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 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 :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;printf("%s\n", s);
s = "\0";
T'as du trompé c'est pas 0 mais '\0' qui le caractère de fin de chaine.
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
Je me suis aperçu que j'avais effectivement remplacé 0 par O, je viens de rectifier.Envoyé par Anomaly
Juste pour une bonne compréhension:
esque ca marche avec mot = ""; ?????
Non, tu dois passer un strcpy.Envoyé par Walm
Faisons simple :
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 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)) }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager