如何解决GAS汇编器-Fgets函数SegFaults
当我尝试使用fgets时,此简单程序会出现段错误。我试过使用读取功能代替
ldr r1,=input_string
mov r3,#80
mov r0,#0
bl read
但这失败了
read(0,0x21044,3201061676)= -1 EINVAL(无效参数)
所以我正在尝试使用fgets。我的字符串缓冲区似乎出了点问题?
.data
.balign 4
message1: .asciz "Please type a string: \n"
.balign 4
input_string:
.asciz ""
.zero 80
return: .word 0
.text
.global main
main:
push {lr}
ldr r0,=message1
bl printf
mov r0,#0
bl fflush
ldr r0,=input_string
mov r1,#80
mov r2,#0
bl fgets
mov r0,r1
bl printf
pop {lr}
bx lr
.end
.global printf
.global read
.global fgets
编辑: 我试图按照注释中给出的示例使用stdin,但是这样编译失败: 错误:立即表达式需要使用#前缀-`mov r2,= stdin'
ldr r0,=input_string mov r1,#80 mov r2,=stdin ldr r2,[r2]
似乎没有像C那样的“ stdin”预定义宏,所以如何告诉它使用stdin?
解决方法
ldr r0,=input_string
mov r1,#80
ldr r2,=stdin
ldr r2,[r2]
bl fgets
答案是使用LDR和stdin
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。