Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C] Strano risultato sizeof()

    Ciao a tutti,
    mi succede una cosa strana:
    ho questa struttura
    codice:
    struct rec_1
    {
            unsigned short num_files;
            unsigned short files_num;
            unsigned char zeroes[49];
    };
    e
    sizeof(unsigned short)=2
    sizeof(unsigned char)=1

    Non ci crederete ma
    sizeof(rec_1)=54

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    non vorrei dire una fesseria, in caso mi correggeranno, ma l'array occupa 50 e non 49 perchè c'è il carattere \0 che ne indica la fine.

  3. #3
    Non credo che il problema sia quello perchè se metto un array di 50 la misura resta 54...

    Ho anche provato a cambiare compilatore ma nulla!!!

  4. #4
    Originariamente inviato da FelixR
    non vorrei dire una fesseria, in caso mi correggeranno, ma l'array occupa 50 e non 49 perchè c'è il carattere \0 che ne indica la fine.
    Il terminatore '\0' non viene messo automaticamente.
    Da zeroes[0] a zeroes[49] sono 50 caratteri, tutto qui.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Ragazzi scusate, è un po' che non programmo in C ma se io dichiro un array di 49 o di 50 all'interno della struttura il sizeof dà sempre 54.
    Se poi dichiaro un array di 51 il sizeof va a 56...

    Non è il termonatore di stringa!!!

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    La grandezza di una struttura non deve essere necessariamente la somma dei dati membro.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Deve sfuggirmi qualcosa di fondamentale a livello di sintassi.
    Qualcuno può provare a compilare al volo questo:

    codice:
    typedef struct rec49
    {
     short num_files;
     short files_num;
     char zeroes[49];
    } trec49;
    
    typedef struct rec50
    {
     short num_files;
     short files_num;
     char zeroes[50];
    } trec50;
    
    typedef struct rec51
    {
     short num_files;
     short files_num;
     char zeroes[51];
    } trec51;
    
    int main(void)
    {
     trec49 r49;
     trec50 r50;
     trec51 r51;
    
     printf("r49 %d \n",sizeof(r49));
     printf("r50 %d \n",sizeof(r50));
     printf("r51 %d \n",sizeof(r51));
    
     return(1);
    }
    Mi sembra incredibile...

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Bhe se non includi stdio non compilerà mai

    codice:
    #include <stdio.h>
    #include <process.h>
    
    typedef struct rec49
    {
     short num_files;
     short files_num;
     char zeroes[49];
    } trec49;
    
    typedef struct rec50
    {
     short num_files;
     short files_num;
     char zeroes[50];
    } trec50;
    
    typedef struct rec51
    {
     short num_files;
     short files_num;
     char zeroes[51];
    } trec51;
    
    int main(void)
    {
     trec49 r49;
     trec50 r50;
     trec51 r51;
    
     printf("r49 %d \n",sizeof(r49));
     printf("r50 %d \n",sizeof(r50));
     printf("r51 %d \n",sizeof(r51));
     system("PAUSE");
    
     return(0);
    }
    Quando un programma termina correttamente è meglio far ritornare 0 che 1.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Vuoi dire che a te non torna 54,54 e 56 invece che 53,54,55 ???

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    54 54 56, esatto.
    Ma non deve intimorirti.
    L'operatore sizeof è di molto basso livello e quindi varia di macchina in macchina (intel, athlon), processori vecchi e nuovi.
    Può essere anche che tra un mese un int di adesso diventi uno short int e l'int semplice aumentato...
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

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.