我有以下代码:

void scan ()
{
    char scanf_fmt[] = "%c";
    char printf_fmt[] = "%c\n";
    char character[30];

    _asm
    {
        push 1 // Buffer size, you can also write `push size character`

        lea eax, character
            push eax     // Pointer to character

            lea eax, scanf_fmt
            push eax                // Pointer to format string
            call scanf_s


            add esp, 12             // Clean up three pushes

            movzx eax, byte ptr[character] // MOVZX: Load one unsigned byte into a 32-bit-register
            push eax// Character as value


            lea eax, printf_fmt
            push eax // Pointer to format string

            call printf

            add esp, 8               // Clean up two pushes era 8
    }

    //return 0;
}


此函数打印单词中的第一个字符,但是我复制了此函数,并更改了名称,例如:scan()scan2();

当我使用新功能时,程序将使用功能scan的先前单词。

我该怎么做才能给我读一个不同的单词?

最佳答案

使用

lea eax, character
push eax     // Pointer to character


您告诉scanf将扫描的数据放在哪里(在您的情况下)

char character[30];


如果您具有第二个功能,但使用相同的缓冲区,则将覆盖彼此的输入

如果您要保存内容,请创建第二个缓冲区,例如

char character[30];
char character2[30];


并改用它:

        push 1
        lea eax, character2
        push eax                // Pointer to buffer
        lea eax, scanf_fmt
        push eax                // Pointer to format string
        call scanf_s
        add esp, 12             // Clean up three pushes

        movzx eax, byte ptr[character2]
        push eax                // Character as value
        lea eax, printf_fmt
        push eax                // Pointer to format string
        call printf
        add esp, 8               // Clean up two pushes era 8

07-24 09:45
查看更多