🔤 文字列
実行時に *** stack smashing detected ***: terminated と出て Aborted (core dumped)。gcc は warning: '__builtin___strcpy_chk' writing 14 bytes into a region of size 8 overflows the destination [-Wstringop-overflow=] を出すことがあります。
strcpy はコピー先の大きさを知りません。char buf[8] に14バイト書き込めば、隣の変数や関数の戻り先アドレスまで上書きします。これがバッファオーバーフローで、攻撃の入口にもなります。
snprintf(buf, sizeof buf, "%s", src); を既定の書き方にします。strncpy は終端を書かない場合があるので、使うなら buf[sizeof buf - 1] = '\0'; を添えます。サイズは必ず sizeof で書き、数字を直書きしないことが再発防止になります。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。