3

ここにコードがあります

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") は、スタック フレーム変数のすべてのメモリを通過するまで停止しませんか? 正しい用語を使用していない場合は申し訳ありません。:)

4

2 に答える 2