Visualizzazione dei risultati da 1 a 8 su 8

Discussione: c++ da void* a char*

  1. #1
    Utente di HTML.it L'avatar di Gioa32
    Registrato dal
    Jan 2000
    Messaggi
    68

    c++ da void* a char*

    Salve a tutti.
    Ho scritto questo pezzo di codice che in pratica visualizza l'indirizzo di una variabile di tipo char, poi assegna questo indirizzo ad un puntatore a void e stampa a video tale puntatore(in pratica faccio un cast da puntatore a char a puntatore a void)

    codice:
     char *c = new char('a');
     cout << &c <<endl;
     void *p=&c;
     cout << p << endl;


    Ma se volessi fare la cosa opposta, ovvero convertire un puntatore a void in un puntatore a char e stampare il valore di questo puntatore? Come dovrei fare? Grazie a tutti.

  2. #2
    Con un cast.
    codice:
    char *c2=(char *)p;
    o anche direttamente
    codice:
    cout<<(char *)p;
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Gioa32
    Registrato dal
    Jan 2000
    Messaggi
    68
    Non va. L'output che ottengo dal seguente codice:

    codice:
    char *c = new char('a');
    cout << &c <<endl;    
    void *p=&c;    
    cout << p << endl;      
    char *c2 =(char *)p;    
    cout << c2 << endl;     
    cout << (char *)p <<endl;
    è questo:

    0x7ffff9b13088
    0x7ffff9b13088
    pq
    pq

    mentre dovrei (vorrei) ottenere 4 stringhe uguali. Come si può fare?

  4. #4
    Pardon, non ci siamo intesi.
    L'operatore << nel caso di char * stampa come stringa, non come puntatore, non c'è modo di aggirare questo fatto. In ogni caso, puoi stampare l'indirizzo dell'inizio della stringa convertendo a void * (non cambia l'indirizzo, solo il tipo del puntatore).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Gioa32
    Registrato dal
    Jan 2000
    Messaggi
    68
    grazie mille

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di Gioa32
    Registrato dal
    Jan 2000
    Messaggi
    68
    Comunque cercando ancora sono riuscita a stampare cosi:
    codice:
     
    char *c = new char('a');
    cout << &c <<endl;
    void *p=&c;
    cout << p << endl;
    char *c2 =(char *)p;
    printf("%p", c2);

  8. #8
    Be', è normale, lì stai dicendo alla printf di considerare l'argomento come se fosse un void *. Nota tra l'altro che quello che fai non è perfettamente standard, dato che, per quanto concerne lo standard C, non è necessariamente vero che un char * abbia le stesse dimensioni di un void *.
    ---edit---
    No però aspetta un momento... &c è un'altra cosa ancora, è la locazione di memoria di c, non di ciò a cui punta...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.