Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    [C] Problema con i puntatori

    Ciao a tutti, ho scritto il seguente pezzo di codice:

    codice:
    #include<iostream>
    
    int main( int argc, char *argv[])
    {
        char *stringa = "Ciao";
    
        *(stringa + 1) = 'z';
    
        cout << stringa;
    
        char t; cin >> t;
    }
    Mi da Segmentation Fault, dove sbaglio?

    Grazie tante :-)
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    char *stringa = "Ciao"; è una costante
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ah...
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165

    Re: [C] Problema con i puntatori


  5. #5
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    In realtà stringa non è un puntatore costante perchè se faccio un stringa++ ottengo come stringa "iao".

    Solo che il suo referenziamento (*stringa) non può essere un lvalue e questo meccanismo non mi è molto chiaro a dire il vero.

    E non mi tornano i conti nemmeno con il TrickyC che riporta questo :



    Inoltre, il metodo visto poco fa per "prelevare" uno ad uno i caratteri che compongono una stringa vale anche nel caso li si voglia modificare:

    char *string = "Rosso\n";

    void main(void)
    {
    printf(string);
    *(string+3) = 'p';
    printf(string);
    }

    Il programma dell'esempio visualizza dapprima la parola "Rosso" e poi "Rospo". Si noti che il valore di string non è mutato: esso continua a puntare alla medesima locazione di memoria, ma è mutato il contenuto del byte che si trova ad un offset di 3 rispetto a quell'indirizzo. Dal momento che l'indirezione di un puntatore a carattere restituisce un carattere, nell'assegnazione della lettera 'p' è necessario esprimere quest'ultima come un char, e pertanto tra apici (e non tra virgolette). La variabile string non a caso è dichiarata all'esterno di main().
    Ho testato il codice e va in segmentation fault e non restituisce assolutamente Rospo.
    Chiedo lumi.

  6. #6
    codice:
    {
    char *str = "pippo\0"
    printf("%s",str);
    *(str+2)='L';
    printf("%s",str);
    }
    non e' consentito

    bisogna usare char str[] al posto di *str

    [prima ho cancellato prima di postare]

  7. #7
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Originariamente inviato da infinitejustice
    char *stringa = "Ciao"; è una costante
    Ovviamente 'Ciao' è costante, non stringa, se no sarebbe stato dichiarato come char * const stringa.

    Piuttosto sarebbe stato più corretto fare char const *stringa = "Ciao";
    Almeno si capiva che 'Ciao' era costante.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

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 © 2025 vBulletin Solutions, Inc. All rights reserved.