2017-07-03 10 views
-1

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を見つけましたが、このバージョンではバッファが「十分な」ものであるとも言います。誰かがこのバッファが正確であるかどうかを判断することができますか、それとも他に賢明な情報を持っていますか?

+0

stringの長さが '13'バイトの場合、13バイトしか割り当てられません。 – haccks

+0

14文字ではなく13文字ですか? – ThingyWotsit

+0

静的バッファが割り当てられていません。 'str'はポインタであり、配列ではありません。また、ISO C07または2010規格はありません(ドラフトは自主的ではありません)。標準はISO9899:2011、つまりC11です。以前のリビジョンはC99でした。文字列リテラルがマルチバイト文字列に変換される方法についての標準は非常に明確です。 – Olaf

答えて

2

文字列定数"Jello, World\0"のタイプはchar [14]です。これは、文字列内の各文字(明示的なNULLバイトを含む)に暗黙のヌル終了バイトを加えたものです。

+0

おかげさまで、バッファは常に正確であると言いますか?文字列の長さに暗黙のヌル文字を加えたものですか?そうであれば、「ちょうど十分」、実際にはちょうど正確なものを使用するという文言がありますか? – Miket25

+0

@ Miket25はい、それは "ちょうど十分な"という意味です。すなわち、文字列とヌルバイトを保持するのに十分な大きさですが、それ以上はありません。 – dbush

関連する問題