如何打印 argv 参数?
How to print argv arguments?
.global main
main:
ldr r0, =message_format
b printf
message_format:
.asciz "argv: %s\n"
如果我执行它,我会得到这个:
# ./a.out 7
argv: ^?~^?~
我如何“传递”给 printf 我的 argv?
argv
是指向长度为 argc + 1
的参数字符串指针列表的指针,其中最后一个元素是 NULL
指针。
ldr r1, [r1,#4]
会将 argv
(argv[1]
) 的第二个元素加载到 r1
。这是指向程序名称后的第一个参数字符串的指针。 (一般)
您将此字符串指针作为整数传递给 printf
,这是不正确的,并且会导致它打印似乎是任意值的内容。
所有 argv
元素都是字符串,因此不需要额外的转换。您只需要通过将 "%i"
更改为 "%s"
.
来告诉 printf
期望字符串而不是整数
请注意,这仅在您确定有第二个元素时才有效。在访问 argv[1]
之前,您应该始终检查 argv[0]
是否为非 NULL
或者 argc
是否大于 0。然后,在访问 argv[1]
.
指向的字符串之前,您还应该检查 argv[1]
是否为非 NULL
或者 argc
是否大于 1
.global main
main:
ldr r0, =message_format
b printf
message_format:
.asciz "argv: %s\n"
如果我执行它,我会得到这个:
# ./a.out 7
argv: ^?~^?~
我如何“传递”给 printf 我的 argv?
argv
是指向长度为 argc + 1
的参数字符串指针列表的指针,其中最后一个元素是 NULL
指针。
ldr r1, [r1,#4]
会将 argv
(argv[1]
) 的第二个元素加载到 r1
。这是指向程序名称后的第一个参数字符串的指针。 (一般)
您将此字符串指针作为整数传递给 printf
,这是不正确的,并且会导致它打印似乎是任意值的内容。
所有 argv
元素都是字符串,因此不需要额外的转换。您只需要通过将 "%i"
更改为 "%s"
.
printf
期望字符串而不是整数
请注意,这仅在您确定有第二个元素时才有效。在访问 argv[1]
之前,您应该始终检查 argv[0]
是否为非 NULL
或者 argc
是否大于 0。然后,在访问 argv[1]
.
argv[1]
是否为非 NULL
或者 argc
是否大于 1