Risultati diversi nella dimensione dello stesso array

di il
6 risposte

Risultati diversi nella dimensione dello stesso array

#include<stdio.h>
#include<stdlib.h>

int main(){

char frase[] = {'c','a','s','a'};

int dim = sizeof(frase)/sizeof(frase[0]);

return dim;

}

se esprimo il mio array di lettere in questo modo {'c','a','s','a'} la dimensione giustamente risulta 4, mentre se lo esprimo cosi' {"casa"} risulta 5, perche'?

6 Risposte

  • Re: Risultati diversi nella dimensione dello stesso array

    Credo ti sia stato detto più volte che se vuoi inizializzare una stringa "velocemente" NON devi usare le graffe, bensì fai:
    char stringa[] = "casa"
    con questa inizializzazione dichiari una stringa che è un particolare tipo di array di caratteri, avente come ultimo carattere \0 (detto terminatore di stringa), quindi anziché avere 4 caratteri nell'array ne hai 5: c, a, s, a, \0: ecco perché la dimensione è più grande.
  • Re: Risultati diversi nella dimensione dello stesso array

    Premetto che secondo me devi iniziare dalle basi perchè credo che tu non abbia chiaro come funziona un programma in C.

    Detto questo frase dichiarato con {'c','a','s','a'} è un array di char. "casa" invece è una stringa perchè a "casa" il compilatore aggiungere,dopo l'ultima a,un carattere speciale con codice ASCII pari a 0 che serve a indicare che la stringa è terminata.Dunque anche se non lo vedi,il compilatore (gcc,clang o qualche brutto port per Windows) vede "casa" come {'c','a','s','a','\0'}. Ad ogni modo,mai usare sizeof per sapere quanti caratteri ci sono in un array.Usa le funzioni strlen e strnlen definite in <string.h> .
  • Re: Risultati diversi nella dimensione dello stesso array

    Perche' non dovrei mai usare sizeof?
  • Re: Risultati diversi nella dimensione dello stesso array

    Perchè funziona solo in determinate condizioni. Hanno creato strlen e strnlen apposta per le stringhe.
  • Re: Risultati diversi nella dimensione dello stesso array

    Leoddio ha scritto:


    perche' non dovrei mai usare sizeof?
    sizeof indica la dimensione in byte della stringa, cosa completamente diversa dal numero di caratteri contenuti. se vuoi sapere quest'ultima cosa allora devi usare strlen (che indica il numero di caratteri totali della stringa) o strnlen (che indica il numero di caratteri da una posizione data alla fine della stringa). naturalmente con strlen il carattere '\0' viene scartato, quindi "casa" risulta avente 4 caratteri, ma l'array di char per immagazzinare "casa" contiene 5 celle!
  • Re: Risultati diversi nella dimensione dello stesso array

    In genere va bene, anzi è consigliato, utilizzare sizeof().
    Non va bene utilizzarlo con le stringhe perchè sizeof() non tratta le stringhe, nel senso che non va alla ricerca del terminatore, semplicemente ti ritorna il numero di byte che costituiscono il dato.
Devi accedere o registrarti per scrivere nel forum
6 risposte