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 :

Créer une chaîne de caractères contenant le caractère NULL


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut Créer une chaîne de caractères contenant le caractère NULL
    Bonjour à tous,

    Voià je dois créer une chaîne de caractères qui contient plusieurs fois le caractère NULL (afin de la transmettre).

    J'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char reponse_connexion[] = {13, 10, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 67, 79, 77, 13, 10, 0, 0, 0, 0,'\0'};
    Mais quand j'affiche cette chaîne, seul les caractères (dont le code en entier est) 13 et 10 s'affichent. Y'a t'il un moyen de despécialiser ce caractère ?

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Zef14
    Y'a t'il un moyen de despécialiser ce caractère ?
    A ma connaissance non, d'ailleurs il ne s'agit pas du caractère NULL qui lui est utilisé pour les pointeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '\0' = 0 = FALSE /* Le FALSE pour imager hein ;) */
    Je pense que le seul moyen pour toi est de définir un caractère null toi même donc un dont tu soit sûr qu'il ne sera pas utiliser autrement que pour cette situation ! Autre solution, déplacer un pointeur sur le prochain caractère non null et afficher ce qui suit et ainsi de suite !

    Pourquoi vouloir formater une chaîne ainsi ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Zef14
    Bonjour à tous,

    Voià je dois créer une chaîne de caractères qui contient plusieurs fois le caractère NULL (afin de la transmettre).

    J'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char reponse_connexion[] = {13, 10, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 67, 79, 77, 13, 10, 0, 0, 0, 0,'\0'};
    Mais quand j'affiche cette chaîne, seul les caractères (dont le code en entier est) 13 et 10 s'affichent. Y'a t'il un moyen de despécialiser ce caractère ?
    Non. Mais tu peux fonctionner avec la taille des donnees (sizeof reponse_connextion te la donne, au contraire de strlen(reponse_connextion))
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Franck.H
    Pourquoi vouloir formater une chaîne ainsi ?
    En fait c'est la trame que m'envoie un serveur pour me dire qu'il a bien reçu ma demande de connexion. Je voulais donc créer cette trame pour pouvoir la comparer avec celle que je reçois, par exemple avec strcmp(trame_recu,reponse_connexion).

    Jean-Marc je ne comprends pas trop comment la taille des données peut m'aider. Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	for(i=0;i<sizeof(eponse_connexion);i++)
    		printf(" %i ",eponse_connexion[i]);
    m'affiche

    13 10 0 0

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    fwrite. Ne pas oublie d'ouvrir le fichier en binaire si tu geres toi-meme precisement le format des fins de lignes.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    fwrite. Ne pas oublie d'ouvrir le fichier en binaire si tu geres toi-meme precisement le format des fins de lignes.
    J'ai regardé la définition de fwrite() et je ne vois comment l'appliquer à mon cas. Il sembleraiit qu'on doit utiliser un fichier, et je n'en utilise pas (bien qu'en Unix tout soit fichier )

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    stdout, c'est quoi?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    L'écran, mais mon but final c'est pas de l'afficher mais de le comparer avec ce que je reçois. Donc dois je l'enregistrer dans un fichier (binaire ?) plutôt que dans une variable ce fameux message ?

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    memcmp.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    memcmp.
    Ok, mais avant je suis obliger d'enregistrer mon message dans un fichier ?

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Non
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Ok, donc je recois ma trame je compare les deux premiers octets je me déplace de 5 octets dans la mémoire, j'arrive sur le caractère 10 je refais ma comparaison, je me déplcae ensuite de 4 octets et ainsi de suite ?

  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 Zef14
    Voià je dois créer une chaîne de caractères qui contient plusieurs fois le caractère NULL (afin de la transmettre).
    Déjà, c'est pas NULL, mais 0 ou nul ou null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char reponse_connexion[] = {13, 10, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 67, 79, 77, 13, 10, 0, 0, 0, 0,'\0'};
    Le dernier 0 n'est pas différent des autres. Attention, si les données comportent des 0, il ne s'agit plus de chaines de caractères, mais de données brutes à traiter en mode adresse/longueur, avec les fonctions adéquates (memcpy(), memcmp(), fread(), fwrite() etc.). Les fonctions 'chaines' sont inapplicables.
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Déjà, c'est pas NULL, mais 0 ou nul ou null.
    Désolé.

    Citation Envoyé par Emmanuel Delahaye
    Le dernier 0 n'est pas différent des autres. Attention, si les données comportent des 0, il ne s'agit plus de chaines de caractères, mais de données brutes à traiter en mode adresse/longueur, avec les fonctions adéquates (memcpy(), memcmp(), fread(), fwrite() etc.). Les fonctions 'chaines' sont inapplicables.
    Ok c'est plus clair.

  15. #15
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Attention dans ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char reponse_connexion[] = {13, 10, 0, 0, ... , 0, 0,'\0'};
    la dernière valeur '\0' est rigoureusement identique aux précédentes.
    '\0' signifie littéralement : la constante entière de code zéro soit la valeur entière zéro.

    Je pense effectivement que la meilleure solution au problème est d'utiliser la taille de la variable reponse_connexion (peut-être faudra-t-il la mesurer au moment de sa lecture ? ).
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  16. #16
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    J'ai réussi, effectivement avec memcmp(), merci à tous.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/05/2013, 12h42
  2. Réponses: 6
    Dernier message: 20/04/2011, 16h44
  3. Créer une chaîne de caractères formatée
    Par gege2061 dans le forum Télécharger
    Réponses: 0
    Dernier message: 01/12/2010, 10h16
  4. Réponses: 4
    Dernier message: 07/06/2007, 22h35
  5. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52

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