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 :

Mettre la taille d'un tableau a zero dans une boucle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut Mettre la taille d'un tableau a zero dans une boucle
    Bonjour
    Je souhaite mettre la taille de mon tableau à zero alors que je suis en pleine boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    char mdc[100]="0";
    char exit[4]="exit";
    while(1)
    {
            if(strcmp(mdc,exit)==0)
            {break;}
     
            read(fdaccept,mdc,sizeof(mdc));
            printf("Message recu du client:%s \n",mdc);
            memset(mdc,'\0',sizeof(mdc));
    }
    J'ai reussi a initialiser tout les caracteres du tableau lors de la declaration et avec le memset.
    Mais je souhaite mettre la taille de mon tableau à zero.
    Fonctionnement de mon prog:
    - Il compare mdc(="0") avec exit(="exit")
    - Si mdc == exit on sort de la boucle
    - Sinon on lit les données recus, on les affiches et on remet à zero les champs du tableau

    Le probleme:
    - si mdc ="banane"
    - si mdc ="exit"
    je ne peux pas sortir de ma boucle
    car mdc != exit
    Je suppose que le prog l'interprete comme cela:
    si mdc ="banane" -> mdc = "banane"
    si mdc ="exit" -> mdc ="exitne" ou mdc="exit\0\0"
    Voilà pourquoi je souhaite reduire la taille de mon tableau ou s'il ya une autre solution je suis ouvert.
    Je vous remercie d'avoir lu entierement ce poste.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    si mdc ="banane" -> mdc = "banane"
    si mdc ="exit" -> mdc ="exitne" ou mdc="exit\0\0"
    Ce sera "exit\0..." puisque le tampon a été préalablement rempli par des 0 par memset(). Or comme le strcmp() n'ira pas plus loin que le premier '\0' pour la comparaison, cela ne devrait pas poser de problèmes.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    Enfaite ça ne marche pas... justement :o
    J'ai testé mon code avant d'avoir posté quand meme.
    Ça ne fonctionne pas.
    Merci quand même.

    Edit: Je viens de tester en envoyant cette fois des le debut exit et rien ne se passe.
    Une erreur au niveau du if ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char mdc[100]="0";
    
    if(strcmp(mdc,exit)==0)
            {break;}
    
            else{
    
            read(fdaccept,mdc,sizeof(mdc));                   //mdc="exit"
            printf("Message recu du client:%s \n",mdc);
            memset(mdc,'\0',sizeof(mdc));
            }

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hoa,

    Déjà, quand je vois ceci :
    4 caractères réservés pour un mot qui en fait 5, sans oublier le zéro terminal nécessaire, ce qui nous amène à 6 caractères, je ne vais pas plus loin dans la lecture.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    J'ai modifié comme me la proposé droggo, rien a faire ça ne fonctionne pas.
    Juste droggo tu me dis de mettre à 6, je ne vois pas pourquoi.
    char exit[4]="exit"

    exit[0]=e
    exit[1]=x
    exit[2]=i
    exit[3]=t
    exit[4]=\0

    Peux tu m'indiquer mon erreur stp?

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Joe,

    Parce que tu débordes de la mémoire réservée, d'où comportement indéfini.

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

Discussions similaires

  1. Tableau en php dans une boucle
    Par m0h4m3d dans le forum Langage
    Réponses: 5
    Dernier message: 28/12/2014, 15h30
  2. Réponses: 9
    Dernier message: 17/07/2013, 10h06
  3. affecter un tableau à un autre dans une boucle
    Par gastoncs dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/11/2011, 10h56
  4. Récuperer la taille d'un clip généré dynamiquement dans une boucle
    Par finalfx dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 20/03/2008, 22h35
  5. Récupérer la taille d'un tableau (edit : et d'une iframe)
    Par Prue dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/08/2005, 15h54

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