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 :

Pointeur et caractère


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Points : 37
    Points
    37
    Par défaut Pointeur et caractère
    Bonsoir;
    Je suis débutant en C et j'ai un programme qui traite des chaine de caractères et des pointeurs avec incrémentation. J'ai trouvé une difficulté de compréhension du petit programme, y-a t-il une idée ? Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    static char * xorncpy (char* destination, const char* source, register size_t n) {
        register char* d = destination;
        register const char* s = source;
        do {
            *d++ ^= *s++;
        } while (--n != 0);
        return (destination);
    }
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ce petit programme est écrit à l'ancienne mode (à l'époque préhistorique où on pensait qu'écrire compact amélirait les performances). Surtout avec les register définis manuellement (on ne fait plus ça depuis au-moins 20 ans car le compilo le fait bien mieux que nous). Ce qui explique que tu aies du mal. Ca me rappelle les exercices où il fallait trouver le résultat d'expressions type *(i++) >>=2.

    Donc t'as une fonction qui reçoit en paramètre deux chaines (par exemple "bonjour" et "salut") et un nombre (par exemple 3). Ce nombre définit la limite du travail qui sera appliqué aux chaines (dans mon exemple on ne traitera que les 3 premiers caractères).
    Afin de ne pas perdre les adresses des débuts de chaines reçues, la fonction commence par recopier ces deux adresses dans deux pointeurs de travail (dans mon exemple le premier pointera sur la case contenant 'b' et le second sur celle contenant 's').
    Ensuite la boucle de travail s'initialise. Celle ci prend le caractère de la première chaine (ici 'b') et lui applique un xor bit à bit avec le caractère de la seconde (ici 's'). Le résultat de ce travail (plutôt incongru pour des caractères alphabétiques mais néanmoins possible vu que le xor s'applique aux bits du code ascii de chaque caractère écrit en binaire) viens alors remplacer le caractère de la première (ici 'b').
    Puis chaque pointeur s'incrémente pour passer sur la case suivante de sa chaine (le premier passe sur 'o' et le second sur 'a') et, si le décompte de "n" n'a pas atteint 0, la boucle recommence alors le travail ci-dessus.

    Au final t'auras ton "bonjour" qui aura été remplacé par quelque chose d'inimaginable (et pas forcément affichable sur un écran).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    t'as bien expliqué ce petit programme.Merciiiiii

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Tu peux donc cliquer sur en bas de page si tu n'as plus de question

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

Discussions similaires

  1. pointeur sur caractère
    Par silma dans le forum Débuter
    Réponses: 13
    Dernier message: 19/12/2010, 02h43
  2. Pointeur de caractère dans une DLL
    Par bubulemaster dans le forum Langage
    Réponses: 6
    Dernier message: 07/11/2007, 10h23
  3. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  4. Pointeurs et chaines de caractères
    Par Maria1505 dans le forum C
    Réponses: 3
    Dernier message: 05/11/2006, 13h46
  5. Réponses: 14
    Dernier message: 22/04/2006, 21h59

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