C言語の学習を始めたばかりです。私はC#とJavaで良い歴史を持っています。C:整数変数がランダムに値を変更する
#include <stdio.h>
#include <stdlib.h>
#include "info.h"
int main()
{
int day = 24, month = 3, year = 2016;
char name[] = "Ahmad\0";
strcpy(name, "Ahmad(strcpy-ed string)\0"); // <-- LINE 8
printf("%s made this program on %d-%d-%d\n", name, day, month, year);
return 0;
}
ご覧のとおり、値は日、月、年に割り当てられています。しかし、問題は、出力が競争力のある異なる値を持つことです。出力はこれです
Ahmad(strcpy-ed string) made this program on 1920234272-1684352377-1885565556
さらに面白いのは、私が8行目を削除しても正しく動作することです。なぜこうなった?
コンテナの容量を超えるものをコピーすると、大問題が発生します。 – user3528438
これはオーバフローです... 'Ahmad \ 0'(6位配列)、' 'Ahmad(strcpy-ed string)\ 0" '(6以上、カウントするのが怠惰です) – Bonatti
私はstrcpy()がメモリを再割り当てすると思った.... –