[C] Une petite histoire de pointeurs

Julien59 -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
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!
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   54
 
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