0

配列を定義しました:

char arr[1480];

ここで、ファイルから正確に 1480 文字を読み取り、arr に入力します (arr[i]=c を実行)。while ループを使用して一度に 1 つの文字を読み取り (istream.get())、インクリメント インデックス = 1480 で停止するため、1480 文字を認識しています。

しかし、その後、strlen(array) を実行すると、1512 が返されます。ファイルから読み取るたびに、常に最大 1480 文字を読み取っていますが、これはいくつかの場合にのみ発生しますが、すべての場合に発生するわけではありません。

私の疑問は、1 つの文字が複数の単位 (strlen(arr) によって返される単位) を占める可能性があることです。もしそうなら、どうすればこれを修正できますか?

ありがとう

PS: 以前、ポインターがガベージされるという問題を尋ねました。これは、1480 を超える長さのバッファー (arr) がある場合の原因です。

4

2 に答える 2

6

配列のサイズには、文字列ターミネータを含める必要があります。配列のサイズを正確に読み取るため、文字列ターミネータを追加することはできません (そして追加しません)。このstrlen関数、および他のすべての文字列関数は、文字列終了文字を使用して文字列の末尾を見つけます。そこにない場合は、見つかるまで続行します。

文字列内の文字数が 1480 文字以下の場合は、サイズ 1481 の配列が必要で、最後が文字列 terminator'\0'です。

于 2013-05-05T04:11:12.607 に答える