我有以下代码:
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