Als Antwort auf einen Kommentar zu einer anderen Antwort von mir ici habe ich gefunden, was ich denke Mai eine Lücke im C-Standard sein (c1x, die früheren habe ich nicht überprüft, und ja, ich weiß, dass es unglaublich unwahrscheinlich ist, dass ich allein unter allen Bewohnern der Erde einen Fehler im Standard gefunden habe). Informationen folgen:
- In Abschnitt 6.5.3.4 ("The sizeof operator") Absatz 2 heißt es
"The sizeof operator yields the size (in bytes) of its operand"
. - In Absatz 3 dieses Abschnitts heißt es:
"When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1"
. - Abschnitt 7.20.3.3 beschreibt
void *malloc(size_t sz)
aber alles, was dort steht, ist"The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate"
. Es wird überhaupt nicht erwähnt, welche Einheiten für das Argument verwendet werden. - Anhang E beginnt die 8 ist die Minimum Wert für
CHAR_BIT
so dass die Zeichen mehr als ein Byte lang sein können.
Meine Frage ist einfach die folgende:
In einer Umgebung, in der ein Zeichen 16 Bit breit ist, wird malloc(10 * sizeof(char))
10 Zeichen (20 Byte) oder 10 Byte zuweisen? Punkt 1 scheint auf Ersteres hinzudeuten, Punkt 2 auf Letzteres.
Hat jemand mit mehr C-Standard-Kenntnissen als ich eine Antwort auf diese Frage?