回答編集履歴
1
誤記修正
answer
CHANGED
@@ -5,4 +5,4 @@
|
|
5
5
|
この説明文中、
|
6
6
|
> strcat() 関数は、dest 文字列の後に src 文字列を付け加える。 その際に、dest の最後にある終端のヌルバイト ('\0') は上書きされ、新たに生成された文字列の末尾に終端のヌルバイトが付与される。 二つの文字列 src と dest は重なってはならない。
|
7
7
|
|
8
|
-
とあります。「**二つの文字列 src と dest は重なってはならない。**」です。ご提示のコードはsrcとdestは同じものになっており、思いっきり重なっています。上記Linux manページの説明文中には`strcat`ではなく、もう少し安全な`strncat`の簡単な実装例が示されていますが、`src`の末端の`'\0'`が見つかるまでコピーし続ける、ということは、src
|
8
|
+
とあります。「**二つの文字列 src と dest は重なってはならない。**」です。ご提示のコードはsrcとdestは同じものになっており、思いっきり重なっています。上記Linux manページの説明文中には`strcat`ではなく、もう少し安全な`strncat`の簡単な実装例が示されていますが、`src`の末端の`'\0'`が見つかるまでコピーし続ける、ということは、`src`から`dest`へ1文字ずつコピーしているそばから`src`の文字列が伸びてしまうので、ずっとコピーし続け、すなわちバッファオーバーフローになります。いったん別のバッファへコピーしてから操作しましょう。
|