teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤記修正

2021/04/17 03:55

投稿

dodox86
dodox86

スコア9416

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'`が見つかるまでコピーし続ける、ということは、src1文字ずつコピーしているから`src`自体の文字列が伸びてしまうので、ずっとコピーし続け、すなわちバッファオーバーフローになります。
8
+ とあります。「**二つの文字列 src と dest は重なってはならない。**」です。ご提示のコードはsrcとdestは同じものになっており、思いっきり重なっています。上記Linux manページの説明文中には`strcat`ではなく、もう少し安全な`strncat`の簡単な実装例が示されていますが、`src`の末端の`'\0'`が見つかるまでコピーし続ける、ということは、`src`から`dest`へ1文字ずつコピーしているそばから`src`の文字列が伸びてしまうので、ずっとコピーし続け、すなわちバッファオーバーフローになります。いったん別のバッファへコピーしてから操作しましょう。