長さプレフィックス付き文字列が克服するゼロ終了文字列の問題は何ですか?
私は『Write Great Code vol. 1』という本を読んでいて、その疑問を抱きました。
ベストアンサー1
1 つの問題は、ゼロで終了する文字列では、文字列の末尾を繰り返し見つけ続けなければならないことです。これが非効率になる典型的な例は、バッファへの連結です。
char buf[1024] = "first";
strcat(buf, "second");
strcat(buf, "third");
strcat(buf, "fourth");
プログラムの呼び出しごとに、strcat
文字列の先頭から開始し、追加を開始する場所を知るために終端文字を見つける必要があります。つまり、文字列が長くなるにつれて、関数は追加する場所を見つけるのにますます多くの時間を費やすことになります。
長さのプレフィックスが付いた文字列の場合、strcat
関数と同等のものは終了位置がすぐにわかり、追加後に長さを更新するだけです。
文字列を表現する方法にはそれぞれ長所と短所があり、問題が発生するかどうかは、文字列で何を行うか、どの操作を効率的に行う必要があるかによって異なります。上記の問題は、文字列が長くなるにつれて手動で文字列の末尾を追跡することで解決できるため、コードを変更することでパフォーマンス コストを回避できます。