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 :

Mémoire et antislash


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut Mémoire et antislash
    En fait je voulais savoir si un double antislash prend 1 ou 2 places dans un buffer.

    Exemple : si j'écris dans mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    main ()
    {
        char a[10], b[10]="c:\\" ; ;
        a="blabla\\" ;
        b[x]= a ;
    }!
    x devra-t-il être égal à 4 ou à 5 ???


    Merci d'avance !

  2. #2
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    tout d'abord,il faudrait que tu lises les régles du forum
    http://www.developpez.net/forums/viewtopic.php?t=334
    tu y apprendra entre autres qu'il faut utiliser les balises codes.
    en ce qui concerne ton code,je te rapelle qu'il n'y a pas de type chaine de caractères en C,tu dois donc utiliser un tableau de caracteres ou un pointeur sur char! ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char a;
     a="blabla\\";
    n'est pas permis en C.
    je te rapelle aussi que toute chaine de caractere se termine par '\0' mème si on ne l'ecrit pas.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut Re: Mémoire et antislash
    Citation Envoyé par CCin
    En fait je voulais savoir si un double antislash prend 1 ou 2 places dans un buffer.

    Exemple : si j'écris dans mon programme:
    "main ()
    {
    char a, b[10]="c:\\" ; ;
    a="blabla\\" ;
    b[x]= a ;
    }"

    x devra-t-il être égal à 4 ou à 5 ???


    Merci d'avance !
    C'est quoi ca?
    x c'est quoi?
    C'est soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(void) ou int main(int argc, char **argv)
    Comme l'a dis afrikha il faut faire un tableau de caractère.
    Si tu veux savoir c'est la case combien du tableau b qui contient un a c'est b[2] et b[5].

    Explique toi mieux la prochaine fois.

    Merci.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut
    Euh... désolé, j'avais chercher une balise [code] dans le BBcode mais je l'avais pas trouvé.

    Mon programme n'est pas correct, je sais, je l'ai écrit à la va-vite et n'ai pas eu le temps de le relire.

    Ca, oui, je le sais que ca doit se termine par '\0' mais, dans mon programme x, à combien sera-t-il égal ???EDIT: En fait, mon tableau de caractères nommé b fait 10 caractères, après avoir écrit "c:\\" dedans, combien de places restera-t-il ??

    Merci !

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Il "restera", comme tu dis 6 caractères non occupés : tu en as pris 3 pour c, : et \ plus le zéro terminal des chaines.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Le backslash étant un caractère particulier en C, pour pouvoir l'utiliser "en tant que caractère propre", il faut le "protéger".
    C'est à dire que pour que la chaine soit composée d'un backslash, il faut en écrire deux.

    Si tu ne fais pas cela, alors le caractère suivant le backslash sera interprété. C'est notamment ce qui se passe lorsque, dans une chaine, on rencontre le caractère '\n'.

    Ceci dit, si tu as des doutes sur la longueur d'une chaîne, le plus simple est probalement d'utiliser strlen(), qui te retourne la taille d'une chaine jusqu'au premier caractère '\0'.

    Donc dans ton exemple, on pourrait dire que x vaut
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Donc le nombre de caractères nécessaires pour stocker une chaîne de longueur n est n+1. Important de s'en souvenir.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par Trap D
    Donc le nombre de caractères nécessaires pour stocker une chaîne de longueur n est n+1. Important de s'en souvenir.
    oui car strlen ne compte pas le '\0' !


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Donc, pour répondre à la question de base:

    "\\" dans une chaîne ne prend qu'un seul octet. Exemple: "a\\b" ne prend que quatre octets : {'a', '\\', 'b', '\0'}
    Toutes les séquences d'échappement commençant par un \ sont considérées comme un seul caractère, donc un seul octet. Même s'il faut x caractères pour les écrire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par Médinoc
    Donc, pour répondre à la question de base:

    "\\" dans une chaîne ne prend qu'un seul octet. Exemple: "a\\b" ne prend que quatre octets : {'a', '\\', 'b', '\0'}
    Toutes les séquences d'échappement commençant par un \ sont considérées comme un seul caractère, donc un seul octet. Même s'il faut x caractères pour les écrire.
    le problème est que la question de base :

    Citation Envoyé par CCin
    Exemple : si j'écris dans mon programme:
    Code:
    main ()
    {
    char a[10], b[10]="c:\\" ; ;
    a="blabla\\" ;
    b[x]= a ;
    }!


    x devra-t-il être égal à 4 ou à 5 ???
    n'a aucun sens en C : a est un tableau de caractères et b[x] est un caractère (en supposant d'ailleurs que x soit initialisé).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par CCin
    En fait, mon tableau de caractères nommé b fait 10 caractères, après avoir écrit "c:\\" dedans, combien de places restera-t-il ??[/color]
    '\\' est un caractère. En mémoire, il y aura la valeur du caractère \.

  12. #12
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut
    D'accord !
    Merci à tous !!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par CCin
    D'accord !
    Merci à tous !!
    Alors un click sur Merci.

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

Discussions similaires

  1. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  2. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37
  3. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 14h27
  4. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 20h20
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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