在尝试从用户那里获取2个字符时(单独),我遇到了下一个问题:第一个字符按预期接收,但第二个字符串始终为NULL。 第二个scanf的返回值是0,这意味着它确实没有收到任何东西。
这是代码:
addl $-4, %esp
pushl %ebx #input goes to ebx
pushl $charInputFormat
call scanf
addl $8, %esp
movl (%ebx), %ebx
#get newChar
addl $-4, %esp
pushl %esi #input goes to esi
pushl $charInputFormat
call scanf
addl $8, %esp
movl (%esi), %esi
当:
charInputFormat: .string " %c"
有人可以说出问题是什么吗?谢谢!
答案 0 :(得分:1)
您的addl $-4, %esp
非常可疑。你想对那些做什么?为输入分配空间?然后,您需要将该位置的地址传递给scanf
。实际上,ebx
和esi
未初始化并指出who-know-where(除非您在未显示的代码中初始化它们)。可能ebx
偶然指向charInputFormat
,并在第二次scanf
来电之前覆盖它。
此代码在这里工作正常:
.globl main
main:
subl $4, %esp # space for input
pushl %esp # pointer to 1st char
pushl $charInputFormat # pass as argument
call scanf
addl $8, %esp
leal 1(%esp), %eax # pointer to 2nd char
push %eax # pass as argument
pushl $charInputFormat
call scanf
addl $8, %esp
movb (%esp), %al # first input
movb 1(%esp), %dl # second input
push %edx
push %eax
push $outputFormat
call printf
addl $16, %esp # restore stack
ret
.data
charInputFormat: .string " %c"
outputFormat: .string "Got %c and %c\n"