Tak, C definiuje na 1, zawsze (a także C++).
Niemniej jednak, zgodnie z ogólną zasadą, radzę coś takiego:
char *ptr = malloc(256 * sizeof(*ptr));
ten sposób, gdy twój szef mówi coś w stylu: „Oh, BTW właśnie dostał zlecenie od Chin więc musimy obsługiwać wszystkie trzy chińskie alfabetów ASAP”, można zmienić go na adres:
wchar_t *ptr // ...
a reszta może pozostać taka sama. Biorąc pod uwagę, że będziesz mieć około 10 milionów bólów głowy próbujących poradzić sobie z i18n nawet w połowie drogi, wyeliminowanie nawet kilku jest warte zachodu. Oczywiście zakłada to, że twoje numery są naprawdę przeznaczone do przechowywania znaków - jeśli to tylko jakiś surowy bufor i naprawdę potrzebujesz 256 bajtów przestrzeni dyskowej, niezależnie od tego, ile (z kilku) znaków może być, prawdopodobnie powinieneś trzymać się z malloc(256)
i być z nim.
Zobacz: http://stackoverflow.com/questions/2215445/are-there-mines-where-sizeofchar-1 – Saul
Warto również zauważyć, że operator sizeof() jest oceniany w czasie kompilacji, więc nie ma wydajności środowiska wykonawczego hit to using sizeof(). (Z wyjątkiem przypadku, gdy długość tablicy jest określona w czasie wykonywania, ale nie jest to użyty przykład.) – poundifdef
Dlaczego nie calloc? – luiscubal