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 :

strcmp( void * , "\n" )


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut strcmp( void * , "\n" )
    Bonjour à tous,
    je calle, je dois recopier un fichier d'une certaine façon avec les appels systèmes read, write. J'ai besoin de savoir si le caractère lu est un retour chariot ("\n"). Ayant consulté les pages man des différentes fonctions (man 2 read, man 2 write et man strcmp) je me rends compte que c'est un problème de format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ssize_t read(int fd, void *buf, size_t count);
    int strcmp(const char *s1, const char *s2);
    ssize_t write(int fd, const void *buf, size_t count);
    Donc mon code est le suivant,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void * buffer;
    while (read(f1,buffer,1) > 0){ //Evite l'erreur (-1) et 0 caractere
       if (strcmp((char *)buffer,"\n") == 0){
          printf("retour chariot");
       }
    }
    Ca compile, mais ça ne fonctionne pas et quand j'affiche le buffer à l'écran j'obtiens des caractères bizarres.

    Comment pourrais-je le faire fonctionner? j'ai essayer avec la comparaison simple (==) également.

    Merci d'avance pour votre aide.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  2. #2
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    J'ai trouvé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int memcmp( const void *s1, const void *s2, size_t n);
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Bah ton buffer faut le déclarer en char *, pas en void *. La conversion est implicite.

    Et c'est surtout que dans ton code, tu n'a pas alloué de place pour buffer, alors ca risque pas de fonctionner.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  4. #4
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Citation Envoyé par Skyrunner
    Et c'est surtout que dans ton code, tu n'a pas alloué de place pour buffer, alors ca risque pas de fonctionner.
    C'est-à-dire? Ce serait mieux si je le faisait comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char * buffer;
    buffer = (char *)malloc(sizeof(char));
    while (read(f1,buffer,1) > 0){ //Evite l'erreur (-1) et 0 caractere
      if (strncmp(buffer,"\n",1) == 0){
        printf("retour chariot");
      }
    }
    free(buffer);
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Ce serait plus simple (et plus rapide à l'exécution) si tu faisais:

    et tant qu'on y est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char c;
    while (read(f1,&c,sizeof(char)) > 0)
    {   
        if (c == '\n')
        {
            printf("retour chariot");
        }
    }

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