Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Differenze dichiarazione stringa

    Salve a tutti. Ho creato un semplice programma che conta quante parole di un testo sono formate da tre lettere:

    codice:
    #include <stdio.h>
    #include <string.h>
    
    int getWordsNumberWith3Letters (char text[]);
    
    int main()
    {
        char text[] = "tre tigri contro tre gatti";
        int counter = getWordsNumberWith3Letters (text);
    
        printf ("%d\n", counter);
    
        return 0;
    }
    
    int getWordsNumberWith3Letters (char *text)
    {
        int counter = 0;
    
        char *word = strtok (text, " ");
        while (word != NULL)
        {
            if (strlen (word) == 3)
                counter++;
    
            word = strtok (NULL, " ");
        }
    
        return counter;
    }
    Il programma così com'è funziona correttamente, ma se provo a cambiare questo:
    codice:
    char text[] = "tre tigri contro tre gatti";
    con questo:
    codice:
    char *text = "tre tigri contro tre gatti";
    Avviando il programma mi compare il messaggio:"Segmentation Fault" :O
    Perchè?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: Differenze dichiarazione stringa

    Nel primo caso viene effettivamente creato un array (nello stack), nel secondo viene solamente creato un puntatore ma il testo viene conservato nel codice.

    Dato che la strtok va a scrivere nell'array, nel primo caso funziona (in quanto e' lecito scrivere nello stack) mentre nel secondo hai l'errore (in quanto e' vietato scrivere nell'area del codice).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: Re: Differenze dichiarazione stringa

    Originariamente inviato da oregon
    Nel primo caso viene effettivamente creato un array (nello stack), nel secondo viene solamente creato un puntatore ma il testo viene conservato nel codice.

    Dato che la strtok va a scrivere nell'array, nel primo caso funziona (in quanto e' lecito scrivere nello stack) mentre nel secondo hai l'errore (in quanto e' vietato scrivere nell'area del codice).
    Ah ok grazie mille! Ho sempre pensato che fosse la stessa cosa, dato che un array di char è sempre un puntatore no? o_O

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: Re: Re: Differenze dichiarazione stringa

    Originariamente inviato da Dreamer89
    Ah ok grazie mille! Ho sempre pensato che fosse la stessa cosa, dato che un array di char è sempre un puntatore no? o_O
    Un "array di char" e un "puntatore" sono cose diverse.

    Il nome di un array di char e' anche il puntatore al suo primo elemento.

    Ma se esiste solamente un puntatore, non e' detto che esista l'area allocata o che sia in una zona di memoria in cui si puo' anche scrivere ...
    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.