IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

comment vider une chaine de caractère


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Points : 76
    Points
    76
    Par défaut comment vider une chaine de caractère
    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 ...

  2. #2
    Membre habitué Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 166
    Points
    166
    Par défaut
    Tu pourrais nous donner un bout de code pour qu'on voit comment tu as procédé.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Points : 76
    Points
    76
    Par défaut
    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..
       } 
     
    }

  4. #4
    Membre habitué Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 166
    Points
    166
    Par défaut
    Je te propose ça:
    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;
     
    }
    qui renvoie:

    bacd
    //chaine vide
    bacd

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Points : 76
    Points
    76
    Par défaut
    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; 
     
    }

  6. #6
    Membre habitué Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 166
    Points
    166
    Par défaut
    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

  7. #7
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 337
    Points : 130 288
    Points
    130 288
    Billets dans le blog
    1
    Par défaut
    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 */
       } 
    }
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    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.
    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;
       } 
     
    }
    N'utilises pas gets mais fgets qui permet de spécifier une taille max et d'éviter de déborder.
    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 ...
    char *s;

    s = (char*) malloc(5 * sizeof(char));
    s = "bacd";
    tu veux sûrement faire :
    strcpy( s, "bacd" );
    La mémoire allouée juste avant est perdue sinon.
    printf("%s\n", s);
    s = "\0";
    "" suffit, et tu veux certainement faire s[0]=0;

  9. #9
    Membre habitué Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 166
    Points
    166
    Par défaut
    T'as du trompé c'est pas 0 mais '\0' qui le caractère de fin de chaine.

  10. #10
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 337
    Points : 130 288
    Points
    130 288
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Driden
    T'as du trompé c'est pas O mais '\0' qui le caractère de fin de chaine.

    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
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  11. #11
    Membre habitué Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 166
    Points
    166
    Par défaut
    Citation Envoyé par Anomaly
    Citation Envoyé par Driden
    T'as du trompé c'est pas O mais '\0' qui le caractère de fin de chaine.

    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.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Points : 90
    Points
    90
    Par défaut
    Juste pour une bonne compréhension:
    esque ca marche avec mot = ""; ?????

  13. #13
    Membre éclairé
    Avatar de Emerica
    Profil pro
    Consultant
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 724
    Points
    724
    Par défaut
    Citation Envoyé par Walm
    Juste pour une bonne compréhension:
    esque ca marche avec mot = ""; ?????
    Non, tu dois passer un strcpy.
    Some of the world's greatest feats were accomplished by people not smart enough to know they were impossible.

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    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))
    }
    Ce qu'on peut faire tout seul en un mois, on peut le faire à deux en deux mois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Comment inverser une chaine de caractères ?
    Par just1980 dans le forum Contribuez
    Réponses: 6
    Dernier message: 01/05/2011, 20h35
  2. Réponses: 7
    Dernier message: 20/04/2007, 16h42
  3. Réponses: 3
    Dernier message: 01/02/2006, 18h26
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo