Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281

    [C] Risalire al tipo di una variabile tramite un puntatore void

    Qualcuno sa se esiste una funzione o un modo (in un classico programma C da console) per risalire al tipo di oggetto a cui punta un puntatore void?
    Questo puntatore lo vorrei usare per fare delle assegnazioni a vari tipo di variabili, anche di tipo char[], e quindi quando trovo dei char[] per fare le assegnazioni mi tocca usare la strcpy

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non e' per nulla chiaro quello che vorresti fare ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Io ho una variabile puntatore di tipo void che può puntare a variabili di vari tipi (compresi array di char, ovvero stringhe)
    A me serve da codice capire a quale tipo di variabile punta il puntatore (uno specie di gettype del .net) per poi trattarlo di conseguenza (devo semplicemente assegnare un valore/stringa alla variabile a cui punta il puntatore)

    Se ho:
    void *p;

    e p punta ad un int/char/float per assegnarlo mi basta fare

    p = &variabile;
    *p = (int)val;

    ma se p punta a una stringa char[] dovrò scrivere questo

    p = variabile
    strcpy(p, val);

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non puoi fare una cosa del genere ... non esiste questa informazione "nel" puntatore ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Ma non è un informazioe del puntatore
    Ad esempio, su .net esiste la gettype che restituisce il tipo dell'oggetto (si può applicare su qualsiasi oggetto)
    Non c'è una cosa analoga in C?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    non esiste. Perchè il C non è a oggetti. Punto.

    Per copiare una zona di memoria puntata da un puntatore a void, ti serve sempre sapere anche la sua dimensione. A quel punto puoi sempre usare la memcpy.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Lascia stare .NET ... e' un'altra cosa ...

    In C, il puntatore e' un indirizzo, un semplice numero ... nessuna informazione puoi ottenere su cio' a cui si punta.

    Nel caso del codice che hai mostrato, puoi usare la memcpy per copiare i dati che vuoi a partire dalla locazione del puntatore ma, in ogni caso, devi sapere sempre *quanti* copiarne ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Ok, domani ci proverò, grazie a entrambi per le info

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.