Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91

    [C]puntatoreApuntatore e arraydiPuntatori , problema

    ciao mi è venuto un dubbio veniale sui puntatori :
    un array di puntatori dovrebbe essere equivalente a un puntatore a puntatore , eccetto
    che quest'ultimo è read only :

    ho provato ad accedere al loro contenuto , ma se nei primi due casi tutto funziona
    nel terzo esempio ottengo sempre core dump : qualcuno mi può aiutare ?
    non vorrei dire sciocchezze ,ma ho il sospetto che che compile-time e run-time centrino qualcosa..

    SI

    codice:
    main(int argc , char **argv)
    {
    ...
    printf ("%s" , argv[1]) ;
    }

    SI
    codice:
    main(int argc , char *[]argv)
    {
    ...
    printf ("%s" , argv[1]) ;
    }

    NO
    codice:
    int main()
    {
    char **str="pippo";
    printf ("%s" , str[1]) ;//coredump
    printf ("%s" , *str) ;//core dump
    }

    grazie

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    premetto che non sono del tutto sicuro che il codice che ti posto sia corretto, quindi prendilo con il beneficio del dubbio e insieme aspettiamo conferme dagli utenti più esperti.
    Comunque dovrebbe funzionare:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
        char **str = (char **) malloc(3*sizeof(char *));        // alloco un array di stringhe
        str[0] = (char *) malloc(10*sizeof(char));               // alloco una stringa di 10 caratteri
        str[0][0]='p';          // inserisco i caratteri della stringa
        str[0][1]='i';
        str[0][2]='p';
        str[0][3]='p';
        str[0][4]='o';
        str[0][5]='\0';         // il terminatore della stringa
        printf("%s\n", str[0]); // stampo la stringa passando il primo puntatore dell'array di puntatori
        return 0;
    }


  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il problema è in questa linea

    char**str="pippo";

    Osservala con attenzione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Il problema è in questa linea

    char**str="pippo";

    Osservala con attenzione ...
    ciao , è un puntatore a puntatore a stringa :
    dovrebbe essere equivalente al char **argv del main , al quale passiamo gli argomenti da linea di comando no?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Il problema è in questa linea

    char**str="pippo";

    Osservala con attenzione ...
    in parole povere str punta a un puntatore che non esiste in memoria: pare essere questo il problema

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da toni00t Visualizza il messaggio
    in parole povere str punta a un puntatore che non esiste in memoria: pare essere questo il problema
    Se la vuoi mettere così ... ma non mi pare tu abbia capito ancora il problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Se la vuoi mettere così ... ma non mi pare tu abbia capito ancora il problema.
    ciao il mio ragionamento è errato?
    comunque adesso
    codice:
    char **str="pippo";
    printf("%s" , str);
    funziona

    e anche
    codice:
    char *str="pippo";
    char **str2;
    str2=&str;
    printf("%s",*str2);
    funziona

    quindi in definitiva char **str="pippo" è di per se un puntatore a stringa e non un puntatore a puntatore a stringa,
    giusto?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No.

    "pippo" non è "un puntatore a puntatore a char" ma rappresenta un semplice puntatore a char.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da oregon Visualizza il messaggio
    No.

    "pippo" non è "un puntatore a puntatore a char" ma rappresenta un semplice puntatore a char.
    perchè dici ? c'è un doppio riferimento.non capisco

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Perché dico cosa?

    "pippo" è un array di caratteri (costante) e viene rappresentato tramite il puntatore al primo carattere in memoria. Non ha nulla a che vedere con un puntatore ad un array di puntatori.

    Non hai chiaro il concetto di puntatore, è per questo che non comprendi adesso ...
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.