Beh*_*ooz 0 c++ inline-assembly
char* ReadNumericFormat = "%i";
int Read(void)
{
int Storage;
__asm
{
LEA EAX, [Storage]
PUSH EAX
PUSH DWORD PTR [ReadNumericFormat]
CALL DWORD PTR [scanf]
ADD ESP, 8
MOV EAX, DWORD PTR [Storage]
}
}
Run Code Online (Sandbox Code Playgroud)
当用户输入"023919"时,程序返回19.
这是一个功能还是黑暗是一个标准?
实际上那是因为你输入了一个八进制数字.
在C中,以0开头的数字将被解释为八进制(base-8)文字.因此,在您的输入中
023919
Run Code Online (Sandbox Code Playgroud)
scanf找到一个没有x跟随的前导零,所以假设它是一个八进制数.然后它消耗2和3,直到9这不是一个有效的八进制数字和停止.所以scanf现在有了
023
Run Code Online (Sandbox Code Playgroud)
是的
2*8 + 3 = 19
Run Code Online (Sandbox Code Playgroud)
所以程序返回19.
使用格式%d而不是%i防止这种情况.