我正在尝试使用fgets逐行读取一个文件。子例程是从一个c测试文件中调用的,该文件的第一个参数是一个FILE*,我正在尝试从该文件中读取。这是我目前为止编写的代码:
.text
char: .asciz "%c"
string: .asciz "%s"
diff: #void diff(FILE* pFile)
pushq %rbp
movq %rsp, %rbp
subq $1024, %rsp
movq %rdi, %rdx
leaq -1024(%rbp), %rdi
movq $1024, %rsi
call fgets
movq %rax, %rsi
leaq string(%rip), %rdi
movq $0, %rax
call printf # printing rax is fine
movq -1024(%rbp), %rsi
leaq char(%rip), %rdi
movq $0, %rax
call printf # printing with %c is fine
movq -1024(%rbp), %rsi
leaq string(%rip), %rdi
movq $0, %rax
call printf # printing with %s will error
movq %rbp, %rsp
popq %rbp
代码在最后一次printf时会出错,我不知道可能的原因是什么。我也尝试过在读取的字符串中添加一个额外的终止空值,但是仍然存在同样的问题。
1条答案
按热度按时间vybvopom1#
将您的代码与编译器生成的代码进行比较:
https://godbolt.org/z/rjx4vh63n