如何打印argv参数?

问题描述

.global main

main:
    ldr r0,=message_format
    b   printf

message_format:
    .asciz "argv: %s\n"

如果执行它,我会得到:

# ./a.out 7
argv: ^?~^?~

如何才能“传递”到argv?

解决方法

argv是指向长度为argc + 1的参数字符串指针列表的指针,其中最后一个元素是NULL指针。

ldr r1,[r1,#4]argvargv[1])的第二个元素加载到r1中。这是指向程序名称后的第一个参数字符串的指针。 (通常)

您要将这个字符串指针作为整数传递给printf,这是不正确的,并且会导致它打印似乎是任意值的

所有argv元素都是字符串,因此不需要其他转换。您只需要将printf更改为"%i",就可以告诉"%s"期望使用字符串而不是整数。


请注意,这仅在您确定还有第二个元素时才有效。在访问argv[0]之前,应始终检查NULL是否非argcargv[1]大于0。然后,在访问argv[1]指向的字符串之前,还应该检查NULL是否非argcargv[1]大于1。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...