3

ノート:

これは純粋な C に関する質問です。C++ 関数などはありません。


質問:

malloc100 の余地があるバッファがあるとしますchars。次に、これらのスロットのうち 5 つだけを実際の で埋めcharsます。次のように、バッファー内の残りのすべてのスロットを null にすることをお勧めします。

while (nextAvailableBufferSlot < currentBufferSize) 
{
    buffer[nextAvailableBufferSlot] = '\0';
    nextAvailableBufferSlot++;
}

これは厳密に必要ですか、それとも単純にbuffer[5] = '\0'自分でループを設定して保存できますか?


環境:

問題のコードは 4096 のバッファ サイズで非常に頻繁に呼び出され、そこにコピーされる文字列の 99% ははるかに短いため、上記のループはほぼ毎回、少なくとも 2,000 回の繰り返しで実行されます。

弦のサイズを事前に知ることはできません。また、再割り当ては非常にコストがかかるため、最初は大きなバッファー サイズを選択します。デスクトップ クラスのハードウェアを対象としているため、メモリはまったく制限されません。

4

4 に答える 4

1

コピーするのが文字列の場合はstrncpy、文字列をコピーするために使用でき、余分なバッファ スペースが自動的に埋められ\0ます。

なんらかの理由strcpyで文字列を手動で使用またはコピーしている場合は、そうです。すべての標準的な文字列操作 ( 、 など) はとにかく最初に停止するため、ループを節約strlenできstrcpyます\0

于 2014-04-04T02:46:28.910 に答える
0

短い答えは、はい、あなたは正しいです。実際には、配列内の最後の文字の直後にある 1 つのヌル ポインターのみが必要なはずです。

典型的な答えは、char ポインターを使用しないのはなぜですか? 文字列のような char* が頭痛の種全体を処理し、これらをより簡単に操作できるように設計されたライブラリがあります。この方法でメモリを直接割り当てる必要はありません。正確に 100 のバッファーが必要な特定の理由があるのはなぜですか?

于 2014-04-04T02:45:47.843 に答える