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 :

vider un tableau de caractères


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut vider un tableau de caractères
    j'utilise ce tableau de caractères : TCHAR Fpath[MAX_PATH]

    ensuite dans mon code je le rempli avec cette boucle :

    while(caract!='\n')
    {
    Fpath[i]=caract;
    caract=fgetc(Projet);
    i++;
    }

    mais avant de le remplir à nouveau quand je réutilise cette boucle, j'aimerais le vider complètement, et je vois pas comment faire

    merci

  2. #2
    Membre du Club Avatar de Seandest
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Salut, peut être en faisant un memset(), mais je sais pas si c'est la bonne solution.

  3. #3
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Je ne sais pas ce que tu entends par "vider", mais si tu veux réinitialiser ton tableau avec une valeur quelconque, alors de ce cas utilises memset().
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersam
    j'utilise ce tableau de caractères : TCHAR Fpath[MAX_PATH]
    <...>j'aimerais le vider complètement
    Tu prends un couteau éffilé et bien aiguisé, tu l'enfonces dans le cloaque, tu ouvres le ventre, tu retires les viscères et tu rinces à l'eau claire et froide. Bon appétit.

    Si c'est pas ça, donne ta définition de 'vider'...
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Pas besoin de vider, suffit de mettre un caractere nul apres ce qu'on considere comme étant la chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     while(caract!='\n')
       {
         Fpath[i]=caract;
         caract=fgetc(Projet);
         i++;
       }
    Fpath[i] = '\0';

    A part ça, c'est un peu chacal de pas tester si fgetc() retourne EOF

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    pour le EOF , plus haut dans mon code je le vérifie

    ensuite j'entends par "vider", remettre les valeurs du tableau à null

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersam
    j'entends par "vider", remettre les valeurs du tableau à null
    memset(), mais ça sert à quoi ?
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    effectivement je viens de regarder memset et ça devrait le faire

    merci

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Pas besoin de vider, suffit de mettre un caractere nul apres ce qu'on considere comme étant la chaine
    Oui mais les autres caractères avant le '\0' sont toujours présents.
    Et un "printf" du tableau en tant que chaine ressortira ces valeurs.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    ouais car je m'explique un peu

    la premirèe fois que ce tableau est utilisé, il est vide
    ensuite je le rempli de caractère (je lit un path dans un fichier texte et je met ce path dans ce tableau)
    ensuite quand je réutilise ce tableau pour lire un autre path, ça écrase le path précédent
    mais si le nouveau path que je rentre dans ce tableau est plus court que le précédent , et bien il reste à la fin les caractères de l'ancien path

    voilà mon problème

    et pendant que j'y pense c'est peut etre avec des \n, et non pas une valeur nulle, qu'il faudrait que je remplisse mon tableau, vu que je m'arrete de lire dès qu'il y a un \n

  11. #11
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par cybersam
    la premirèe fois que ce tableau est utilisé, il est vide
    ensuite je le rempli de caractère (je lit un path dans un fichier texte et je met ce path dans ce tableau)
    ensuite quand je réutilise ce tableau pour lire un autre path, ça écrase le path précédent
    mais si le nouveau path que je rentre dans ce tableau est plus court que le précédent , et bien il reste à la fin les caractères de l'ancien path
    C'est bien ce que je dis, il te suffit de mettre un caractere nul à l'endroit où tu veux terminer la nouvelle chaine

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Gruik
    C'est bien ce que je dis, il te suffit de mettre un caractere nul à l'endroit où tu veux terminer la nouvelle chaine
    ouais t'as complètement raison, j'y avais pas pensé en premier, alors que c'est ce qu'il y a de plus simple à faire
    mais j'étais entêter à réinitilaiser ce tableau !

    merci

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    Oui mais les autres caractères avant le '\0' sont toujours présents.
    Et un "printf" du tableau en tant que chaine ressortira ces valeurs.
    Ah oui ? Par quel miracle ?
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersam
    ouais car je m'explique un peu

    la premirèe fois que ce tableau est utilisé, il est vide
    ensuite je le rempli de caractère (je lit un path dans un fichier texte et je met ce path dans ce tableau)
    ensuite quand je réutilise ce tableau pour lire un autre path, ça écrase le path précédent
    mais si le nouveau path que je rentre dans ce tableau est plus court que le précédent , et bien il reste à la fin les caractères de l'ancien path
    C'est parce que tu oublies de terminer ta chaine par un zéro. C'est à toi de le faire (ou d'utiliser les fonctions qui le font pour toi).
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Ah oui ? Par quel miracle ?
    Je pensais qu'il voulait nettoyer le tableau AVANT de réinscrire des données.
    EDIT: Ce qui est le cas:
    mais avant de le remplir à nouveau quand je réutilise cette boucle, j'aimerais le vider complètement, et je vois pas comment faire
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    Je pensais qu'il voulait nettoyer le tableau AVANT de réinscrire des données.
    EDIT: Ce qui est le cas:
    Si on écrit une chaine valide, on a pas à se préoccuper de ça.Evidemment si on oublie ne mettre le zéro, le comportement est indéterminé.

    En mode debug, j'ai l'habitude de remplir mes zones de données avec des 0x55 ou des 0xAA, histoire de provoquer un crash velu le plus tôt possible...

    J'ai même une macro pour ça dans mon sys.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /* pollution controlee d'une structure */
    #ifndef NDEBUG
    #define GARBAGE(p) memset((p),0x55,sizeof *(p))
    #else
    #define GARBAGE(p)
    #endif
    http://emmanuel-delahaye.developpez.com/clib.htm
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    A quoi correspondent 0x55 et 0xAA?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  18. #18
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    C'est des valeurs arbitraires, mais pour quoi faire?? Pourquoi pas des \0 ?

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gruik
    C'est des valeurs arbitraires, mais pour quoi faire?? Pourquoi pas des \0 ?
    Parce que si il manque un 0, ça voit tout de suite !
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Ah oui! dans le cas où on imprime ces chaines

    aaaaaaaah, pas con

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2023, 15h51
  2. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  3. convertir un tableau de caractère en float
    Par zerocoolyoussef dans le forum C
    Réponses: 3
    Dernier message: 20/03/2006, 22h27
  4. Comment vider un tableau de char ?
    Par Battosaiii dans le forum C
    Réponses: 5
    Dernier message: 18/03/2006, 17h42
  5. comment vider une chaine de caractère
    Par gaut dans le forum C
    Réponses: 13
    Dernier message: 12/09/2003, 11h30

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