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 :

Comparer deux chaines de caractere: une fixe et une variable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Par défaut Comparer deux chaines de caractere: une fixe et une variable
    J'ai un petit souci pour comparer 2 chaines de caractères:
    voici le code:

    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
    19
    20
    21
    22
    23
    24
    char login1[50]="admin";
    char mdp1[50]="azerty";
     
    char login[50]="";
    char mdp[50]="";
     
    int main()
    {
     
    if(recv(ns, login, 50, 0) != SOCKET_ERROR)
    {
        printf("Recu : %s\n", login);
    }
     
        if (strcmp(login1, login) == 0) // Si strcmp renvoie 0 (chaînes identiques)
        {
            printf("Les logins sont identiques\n");
        }
        else
        {
            printf("login differents\n");
        }
     
    }

    Le code est un peu simplifie ici !!

    Je voudrai mettre la valeur que je reçoit dans la chaine de caractère "login" pour ensuite la comparer avec la chaine "login1"

    Merci de votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Pouvez vous expliciter votre "petit soucis" en voyant le code simplifier, je me dis que tout ce qui est manquant ( pour moi ) et dans le code qui n'a pas été mis .

    J'imagine que le test ne marche pas après réception des données. Avez vous essayer d'afficher login, juste pour savoir ce qu'il y avait dedans, pour être bien sur de dire que le strcmp est bon ou pas.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut,

    Citation Envoyé par cobra85 Voir le message
    J'ai un petit souci pour comparer 2 chaines de caractères:
    Ton probleme est ailleurs, l'echec de la comparaison est une consequence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char login[50]="";
    char mdp[50]="";
    login et mdp sont des chaines de caracteres constantes, donc impossible d'y ecrire.
    Il faut les declarer comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char login[50];
    char mdp[50];
    Si tu veux les initialiser par le string vide (c'est la plupart du temps une bonne idee de toute maniere) il faut utiliser memset():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    memset(login, 0, 50);
    memset(mdp, 0, 50);
    Deux petites remarques:
    tu devrais utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recv(ns, login, 50 - 1, 0)
    pour etre sur d'avoir un string correct (c'est a dire termine par \0) et donc eviter les problemes lors du strcmp() si tu recois un string qui fait plus de 50 caracteres.
    Il te serait plus simple a long terme d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define TAILLE_BUFFER 50
    char login[TAILLE_BUFFER];
    recv(ns, login, TAILLE_BUFFER - 1, 0)
    Ca evite beaucoup de probleme par la suite et c'est plus lisible.

  4. #4
    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
    @tonton fred :
    login et mdp sont des chaines de caracteres constantes, donc impossible d'y ecrire.
    Il faut les declarer comme suit:.............
    Il est parfaitement correct d'initialiser des tableaux de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char login[50]="";
    char mdp[50]="";

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Par défaut
    Salut,

    Merci, pour votre aide, en faite, j'ai trouver assez tard dans la nuit, mais le problème venait du nombre de caractères transmis:

    Quand je transmettais "admin", il y avait un '\n' à la fin, donc avec un bout de code, j'ai supprimer ce caractère. Et cela fonctionne.

    Pour ceux que cela intéresse, voici le code:

    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
    19
    static void search(char *login)
    {
        char *p = strchr(login, '\n');
     
        if (p)
        {
            *p = 0;
        }
    }
     
    int main
    {
        if (recv(ns, login, 50, 0) != SOCKET_ERROR)
        {
            search(login);
            printf("\nRecu :%s", login);
        }
     
    }
    Et ensuite je compare.

    Merci

  6. #6
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Citation Envoyé par diogene Voir le message
    @tonton fred :
    Il est parfaitement correct d'initialiser des tableaux de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char login[50]="";
    char mdp[50]="";
    Ha oui

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

Discussions similaires

  1. [XL-2003] comparer deux chaines de caracteres
    Par goldfinger13 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/05/2011, 23h41
  2. [Débutant] comparer deux chaines de caractere a partir d'une base de donnees
    Par jeune informatique dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/05/2010, 15h53
  3. [Débutant] comparer deux chaine de caracteres
    Par jeune informatique dans le forum MATLAB
    Réponses: 3
    Dernier message: 20/05/2010, 14h10
  4. [Débutant] comparer deux chaines de caracteres
    Par jeune informatique dans le forum MATLAB
    Réponses: 1
    Dernier message: 15/05/2010, 21h01
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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