PDA

View Full Version : [C] array di stringhe


spoiler.
26-05-2014, 19:25
salve a tutti,

sono piuttosto inesperto di programmazione C e mi chiedevo se fosse possibile inizializzare un array i cui elementi siano delle stringhe . :D

lorenzo001
26-05-2014, 22:32
char elenco[][10] = { "uno", "due", "tre", "quattro", "cinque" };

spoiler.
27-05-2014, 14:20
La semplicitá della tua risposta mi fa sentire un tantino stupido :doh: .

Comunque grazie mille mi sei stato di grande aiuto :D

ma una matrice di questo tipo char elenco [4] [4]

alloca in memoria 16 byte giusto?

lorenzo001
27-05-2014, 14:46
Sì, 16 byte

Z80Fan
14-06-2014, 02:07
ma una matrice di questo tipo char elenco [4] [4]

alloca in memoria 16 byte giusto?

In realtà (e per essere pignoli :P) alloca 16*sizeof(char) byte.

Lo standard C non indica esattamente quanto grandi sono i vari tipi (può variare da compilatore a compilatore o da architettura a architettura), ma nel 99% delle piattaforme un char è 1 byte, quindi non ci si preoccupa più di tanto.

http://en.wikipedia.org/wiki/C_data_types

Se devi fare un programma dove la dimensione del tipo di dato è molto importante (device driver, pacchetti di rete e cose del genere) ti consiglio di usare i tipi definiti in stdint.h (http://www.cplusplus.com/reference/cstdint/), che son garantiti di avere la giusta dimensione che gli indichi.

van9
14-06-2014, 13:45
In realtà (e per essere pignoli :P) alloca 16*sizeof(char) byte.

Lo standard C non indica esattamente quanto grandi sono i vari tipi (può variare da compilatore a compilatore o da architettura a architettura), ma nel 99% delle piattaforme un char è 1 byte, quindi non ci si preoccupa più di tanto.


Quando l'operando di sizeof è char/unsigned char/signed char, il risultato è 1 per definizione dallo standard.

Z80Fan
14-06-2014, 16:57
Quando l'operando di sizeof è char/unsigned char/signed char, il risultato è 1 per definizione dallo standard.

Interessante: mi hai fatto fare una piccola ricerchina su questo fatto, ed effettivamente C99 dice che sizeof(char) == 1 byte.

La cosa interessante però, è che è 1 byte "C", ovvero secondo quanto indicato dallo standard (PDF, pag.4) (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf):
byte
addressable unit of data storage large enough to hold any member of the basic character set of the execution environment

Quindi tecnicamente un "execution environment" potrebbe avere un "byte" non necessariamente di 8 bit, ma di più o di meno, e visto che questa dimensione è la base per tutti gli altri tipi di dato, variano anche l'effettivo numero di bit di tutti gli altri tipi.

Quindi è vero che 16*sizeof(char) == 16, però non sono necessariamente 16*8 = 128 bit.

Quante cose si imparano! (e quanto gli standard C e C++ sono inutilmente complessi)