。主な懸念は、tempPrefix
に接頭辞+元の文字のための十分なスペースがあることです。 Cの文字列はnullで終了する必要があるため、関数は接頭辞の28文字を超えてコピーしてはいけません。それは30(バッファーのサイズ) - 1(ルートラベル文字)-1(終了ヌル文字)です。幸いな標準ライブラリはstrncpy
があります
size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope.
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = root->label;
tempPrefix[buffer_size - 1] = '\0';
したがって、あなたは最小限の変更でそのサイズを大きくすることができ、ハードコードにないも、関数呼び出しのバッファサイズ価値があります。
あなたのバッファが正確にフィットしていない場合は、より多くの足跡が必要です。このアプローチはこれまでとほぼ同じですが、画像を完成させるにはstrchr
への呼び出しが必要です。
size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope.
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = tempPrefix[buffer_size - 1] = '\0';
*strchr(tempPrefix, '\0') = root->label;
もう一度28文字をコピーします。しかし、明示的にNULバイトで終わりを埋める。現在、strncpy
は、コピーされる文字列が短い場合には、count
までのNULバイトでバッファを満たしているので、実際にコピーされた接頭辞の後のすべてが\0
になります。このため、私はすぐにstrchr
の結果を尊重し、有効な文字を指すことが保証されています。正確な最初の空き領域。
[Cの連結文字配列]の複製があります。(http://stackoverflow.com/questions/2218290/concatenate-char-array-in-c) –
は、前の質問とどのように私の違いがあるのですか? –
へようこそスタックオーバーフロー!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –