2

次のコードがあります

char *new_str;
int size_in_bytes;
int length;

size_in_bytes = 2*sizeof(char);
new_str = (char *)malloc(size_in_bytes);
length = strlen(new_str);

長さが 2 であると予想すると、実際には 16 です。誰かが理由を説明できますか?

4

1 に答える 1

5

strlen() は、渡したアドレスから始まる最初のヌルバイト ('\0') のインデックスを返します。通常、C の文字列は、文字列の終わりを示すために、常にこの文字で終わります。

strlen() は、実際のメモリ ブロックの長さを返しません。

あなたの例では、メモリは初期化されておらず、 strlen() はヌルバイトが見つかるまで、メモリブロックの終わりを過ぎてプログラムのヒープの他の部分に読み込んでいます。

于 2012-04-13T18:59:30.930 に答える