Cの文字列のISO C標準を読みましたが、c文字列が定義されているときにコンパイラが静的バッファのサイズをどのように決定するのか不思議です。以下の例のCの文字列が与えられた場合、C文字列の静的バッファのバイトサイズ
#include <stdio.h>
int main(){
char *str = "Jello, World\0";
}
13文字の文字列は、おそらく13バイトになります。しかし、文字列リテラル用のISO C 07+標準の§6.5.4 903、
903に係るマルチバイト文字列は、静的記憶域期間と配列を含むようにちょうど十分な長さの配列を初期化するために使用されます。
私にとって「ちょうど十分な」という言葉はおかしな言葉です。これは、C文字列の静的バッファが、指定されたC文字列に必要な正確なサイズではないことを意味しますか?必要以上のスペースがある可能性があります。
私もISO C 2010の草案と§6.5.4 6 pg.71を見つけましたが、このバージョンではバッファが「十分な」ものであるとも言います。誰かがこのバッファが正確であるかどうかを判断することができますか、それとも他に賢明な情報を持っていますか?
stringの長さが '13'バイトの場合、13バイトしか割り当てられません。 – haccks
14文字ではなく13文字ですか? – ThingyWotsit
静的バッファが割り当てられていません。 'str'はポインタであり、配列ではありません。また、ISO C07または2010規格はありません(ドラフトは自主的ではありません)。標準はISO9899:2011、つまりC11です。以前のリビジョンはC99でした。文字列リテラルがマルチバイト文字列に変換される方法についての標準は非常に明確です。 – Olaf