Ho un programma semplice come questo:array di caratteri nelle strutture: perché strlen() restituisce qui il valore corretto?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int numberOfDays;
char name[10];
} Month;
int main(void)
{
const Month months[12] = {
{ 31, {'J', 'a', 'n'} },
{ 28, {'F', 'e', 'b'} }
};
printf("%zu\n", strlen(months[0].name));
printf("%zu\n", sizeof(months[0].name));
printf("%zu\n", strlen(months[1].name));
printf("%zu\n", sizeof(months[1].name));
return 0;
}
L'output è simile a questo:
3
10
3
10
capisco perché sizeof(months[i].name)
stampe 10, ma perché strlen
restituire il valore corretto in questo caso?
Il mio pensiero era, che strlen
conta fino al primo '\0'
, ma l'array char name[3]
non è terminato con null. Dalla mia comprensione questo dovrebbe essere un comportamento indefinito? Funziona solo per caso?
Mi chiedo quale sia il layout di memoria nell'array months[12]
precedente.
SBAGLIATO. Questo non è UB. Il resto della struct viene inizializzato su zeri. –
Mi dispiace, sono i miei cattivi ragazzi. Nella struct in scritto 'char name [10]' ma nella domanda ho parlato di 'char name [3]'. Entrambi funzionano però, questo è ciò che mi meraviglia. – Max
@Max Si prega di non modificare la domanda in un modo che faccia apparire la risposta già fornita fuori dal contesto. Grazie. –