ここにコードがあります
smem_dmp(char *name, char content[])
{
int i;
int len = strlen(content);
printf("%s\n\n", name);
for(i = 0; i < len; i++)
{
printf("%c\t%p\n", content[i], &content[i] );
}
printf("Done\n\n");
}
print_bar()
{
printf("********************************************************************\n");
}
int main(int argc, char *argv[])
{
char a[16];
char b[16];
strcpy(a, "abcdefghijklmnop");
printf("a = %s\nb = %s\n\n",a,b);
smem_dmp("A", a);
smem_dmp("B", b);
print_bar();
strcpy(b, "ABCDEFGHILKLMNOP");
printf("a = %s\nb = %s\n\n",a,b);
smem_dmp("A", a);
smem_dmp("B", b);
system("PAUSE");
return 0;
}
a と b がメモリ内のどこにあるかを見て、何が起こっているかを理解しました。b にコピーされた文字列は null で終了しません。これにより、b がメモリ (0028FF30) 内の a の前 (0028FF20) に配置されているため、a の内容が削除されます。
何が起こっている?strcpy(b,"string") は、スタック フレーム変数のすべてのメモリを通過するまで停止しませんか? 正しい用語を使用していない場合は申し訳ありません。:)