Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
次のコードがあります
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 です。誰かが理由を説明できますか?
strlen() は、渡したアドレスから始まる最初のヌルバイト ('\0') のインデックスを返します。通常、C の文字列は、文字列の終わりを示すために、常にこの文字で終わります。
strlen() は、実際のメモリ ブロックの長さを返しません。
あなたの例では、メモリは初期化されておらず、 strlen() はヌルバイトが見つかるまで、メモリブロックの終わりを過ぎてプログラムのヒープの他の部分に読み込んでいます。