[C] Une petite histoire de pointeurs

Fermé
Julien59 - 11 avril 2012 à 20:51
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 12 avril 2012 à 15:18
Bonsoir,

Dans un programme je vais lire en mémoire à un endroit donné une valeur, valeur qui se trouve être une adresse (A1).
char adressedudebutdustring =*((char*)0x10152D89);

A l'adresse A1, il y a le début d'une chaine de caractère (de longueur N). Le problème est que cette chaine n'a pas le \0 final, donc pas moyen de faire fputs(adressedudebutdustring, pFile) sans avoir des caractères en trop.


Je ne peux que lire dans cette partie de la mémoire, donc pas moyen non plus d'écrire un \0 à l'adresse A1+N.

Je cherche donc un moyen d'écrire la chaine de caractère de longueur N commençant à l'adresse A1, quitte à passer par une étape intermédiaire (j'ai tenté un coup de memcpy mais le résultat a été plutôt moche).


Merci beaucoup!

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
11 avril 2012 à 22:58
Bonjour,

Tu peux te construire un buffer alloué avec malloc(N+1);
Et ensuite tu utilises la fonction strncpy() pour copier les N caractères débutant à A1 dans la chaîne allouée.
Et après, tu écris dans ton fichier avec fputs();

Cdlt,
0
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
12 avril 2012 à 15:18
Bonjour,

Si vous pouvez donner le vrai bout de code que vous utilisez pour lire à l'adresse se serait bien parce que :
char adressedudebutdustring =*((char*)0x10152D89);
c'est un simple char récupérant une valeur, il vous faut un pointeur
char *ptr = (char*)0x10152D89;
et avec un pointeur normalement pas de problème à utiliser memcpy
simu :
int main(void){
    char *a,*b="ceci est un testaaa",c[100]; int x;
    a=malloc(sizeof(char)*100); /* recup une adresse */
    strcpy(a,b); /* met des données à l'adresse */
    x=(int)a;   /* stock l'adresse dans un int ... */
    a=NULL;     /* a n'a plus d'adresse */

    a=(char*)x; /* simule le a=(char*)0x.. */
    memcpy(c,a,sizeof(char)*16);
    c[16]='\0';
    fputs(c,stdout);

    free(a);
    getchar();
    return 0;
}
0