Langage C | traduction
remousse
Messages postés
299
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dois analyser un programme C et je bute sur ce bout de code :
Pouvez-vous m'expliquer ce que cela fait ?
Par avance merci.
Je dois analyser un programme C et je bute sur ce bout de code :
char buf[1024*1024*100]; char cnbc[4]; strncpy(cnbc, buf+decal, 2); cnbc[2] = (char) 0; sscanf(cnbc, "%2X", &nbc); strncpy(fichier, buf+decal+3, nbc); fichier[nbc] = (char) 0;
Pouvez-vous m'expliquer ce que cela fait ?
Par avance merci.
A voir également:
- Langage C | traduction
- Langage ascii - Guide
- Google traduction photo - Guide
- Langage binaire - Guide
- Hibiki traduction telecharger - Accueil - Intelligence artificielle
- Display name traduction ✓ - Forum Mail
1 réponse
Salut remousse,
Peut-être comme cela est-ce plus clair :
Il semble que buf contienne une série d'octets codés sous forme de chaînes représentant la taille d'une chaîne qui suit immédiatement, et ainsi de suite (je suppose qu'ailleurs dans le code la variable "decal" est incrémentée de la longueur de l'ensemble, permettant de tomber sur de codage de l'octet suivant, etc.
Dal
Peut-être comme cela est-ce plus clair :
#include <stdio.h> #include <stdlib.h> #include <strings.h> int main() { char buf[256]; /* j'ai réduit la taille, 1024*1024*100 = 100 Mo */ char fichier[256]; /* non déclaré, logiquement, c'est son type */ char cnbc[4]; int nbc; /* non déclaré */ int decal = 0; /* non déclaré */ /* mettons des valeurs à buf */ snprintf(buf+decal, 3, "%2X", 0x04); printf("On met dans buf une chaine représentant un octet en notation hexadécimale : %2X\n", 0x04); snprintf(buf+decal+3, 5, "%s", "toto"); printf("On met à la suite dans buf une chaine dont la longueur correspond à la valeur précédente : %s\n", "toto"); /* ton code */ strncpy(cnbc, buf+decal, 2); /* récupération de l'octet en chars */ cnbc[2] = (char) 0; /* on termine la chaîne de 2 chars */ printf("Dans cnbc, on a récupéré la chaîne représentant un octet en notation hexadécimale : %s\n", cnbc); sscanf(cnbc, "%2X", &nbc); /* on transforme la chaîne en entier */ strncpy(fichier, buf+decal+3, nbc); /* on se sert de cet entier pour * déterminer la longueur de la * chaîne à la suite */ fichier[nbc] = (char) 0; /* on termine la chaîne de nbc chars */ printf("Dans fichier, on a récupéré la chaîne stockées à la suite, dont la longueur est %d octets : %s\n", nbc, fichier); return 0; }
Il semble que buf contienne une série d'octets codés sous forme de chaînes représentant la taille d'une chaîne qui suit immédiatement, et ainsi de suite (je suppose qu'ailleurs dans le code la variable "decal" est incrémentée de la longueur de l'ensemble, permettant de tomber sur de codage de l'octet suivant, etc.
Dal