Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56

    C casting di un puntatore ?

    char **b è un puntatore a puntatore che mi ha funzionato con strcpy come sotto >>>

    strcpy( (*b), line);

    mentre con le altre impostazioni sotto mi dava errore .
    Cosa ho fatto un casting a livello più basso ?

    strcpy ( b, line); warning: passing argument 1 of ‘strcpy’ from incompatible pointer type

    strcpy ( **b, line); warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast

    strcpy ( (**b), line); warning: passing argument 1 of ‘strcpy’ from incompatible pointer type

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Il primo argomento della strcpy è un puntatore, nel primo caso gli passi un puntatore a puntatore, nel secondo e terzo caso gli passi un singolo carattere (ma le parentesi non servono).
    Devi aver allocato almeno un puntatore e un certo numero di caratteri.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da ramy89
    Il primo argomento della strcpy è un puntatore, nel primo caso gli passi un puntatore a puntatore, nel secondo e terzo caso gli passi un singolo carattere (ma le parentesi non servono).
    Devi aver allocato almeno un puntatore e un certo numero di caratteri.
    Ti metto un po di codice per completare....
    p punta a dei caratteri..che ci sono...
    b è un puntatore a p ....ma funziona solo con strcpy( (*b), line);
    come facessi un cast da **b a *b come ti mostravo...


    char *p;
    char line[MAXLEN];
    char **b;

    b = &p ;


    strcpy( (*b), line);

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ma l' istruzione:

    codice:
    strcpy( (*b), line);
    E' sintatticamente corretta.
    Nel tuo codice non stai facendo alcun cast.

    come facessi un cast da **b a *b come ti mostravo...
    Non si è capito.
    Spiega cosa stai tentando di fare.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da ramy89
    Ma l' istruzione:

    codice:
    strcpy( (*b), line);
    E' sintatticamente corretta.
    Nel tuo codice non stai facendo alcun cast.

    Non si è capito.
    Spiega cosa stai tentando di fare.
    Cerco di spiegarmi meglio.
    p è un puntatore a caratteri e la funzione va bene con questa codifica >>>
    strcpy( p, line);

    b è un puntatore a p e mi aspettavo di codificare cosi strcpy(b, line);
    invece funziona solo cosi ( e la copia viene fatta perfettamente...) >>>
    strcpy( (*b), line);

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da roldo
    Cerco di spiegarmi meglio.
    Se pensi che sia corretto

    strcpy(b, line);

    probabilmente non hai compreso bene il funzionamento dei puntatori.


    b è un puntatore a puntatore a char (un puntatore doppio a char, ovvero un char**)

    (*b) è un puntatore a char (ovvero un char*)

    e dato che il parametro deve essere un puntatore a char (e non un puntatore a puntatore a char) la prima scrittura è sbagliata e la seconda è corretta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da oregon

    b è un puntatore a puntatore a char (un puntatore doppio a char, ovvero un char**)

    (*b) è un puntatore a char (ovvero un char*)

    e dato che il parametro deve essere un puntatore a char (e non un puntatore a puntatore a char) la prima scrittura è sbagliata e la seconda è corretta.
    Va bene...e cosi ho fatto (anche se a tentativi) .....e ritorno alla domanda
    iniziale : facendo (*b) ho fatto diventare un puntatore a puntatore un puntatore a caratteri ,
    ho fatto un casting come si fa con (char **) o (char *) . Cerco solo di capire se è una forma
    sintattica ...

  8. #8
    Non è un casting! Hai un casting di puntatori quando dici al compilatore "fregatene del tipo di questo puntatore, fai finta che invece di puntare ad un char * punti ad un char". Quelli che fai tu invece è dereferenziare un puntatore, ovvero andare a prendere l'elemento a cui punta (nel caso specifico, un puntatore a char).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da MItaly
    Quelli che fai tu invece è dereferenziare un puntatore, ovvero andare a prendere l'elemento a cui punta (nel caso specifico, un puntatore a char).
    dereferenziare , è una bella parola e descrive quel che va a fare . Sotto quale capitolo
    del linguaggio me la trovo ?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel capitolo "I puntatori" ... come ti dicevo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.