Robert C Seaford による C および C++ の安全なコーディングの本を読んでいます。
int main(int argv, char* argv[]) {
char a[16];
char b[16];
char c[32];
strcpy(a, "0123456789abcdef");
strcpy(b, "0123456789abcdef");
strcpy(c, a);
strcat(c, b);
printf("a = %s\n", a);
retrun 0;
}
3 つの文字配列の静的宣言は、null 終了文字用のストレージを割り当てることができません。
その結果、最初strcpy()
は配列の末尾を超えてヌル文字を書き込みます。
コンパイラが記憶域を割り当てる方法によっては、このヌル バイトがstrcpy()
次の行で上書きされる場合があります。この場合、a
は 20 文字の配列をb
指し、 は 10 文字の配列を指します。
私の質問は、著者の平均配列a
に 20 文字が含まれ、配列b
が 10 文字を指している方法を教えてください。