どうすればこれを回避できるのか、私はいつも疑問に思っていました:
int main(int argc, char **argv) {
printf("%p %s %d\n", &argv[1], argv[1], strlen(argv[1]));
char copy[strlen(argv[1]) + 1];
strcpy(copy, argv[1]);
printf("%p %s %d\n", ©, copy, strlen(copy));
return 0;
}
とにかくchar配列copy
が割り当てられ、プログラムは正常に実行され、元とコピーが出力されます。そしてヴァルグリンドは何も文句を言わない。
C では malloc なしでは動的配列は不可能だと思っていました。私は間違っていましたか?