我知道这是基本的东西,但我遇到了一个特别的问题。
我正在实现一个简单的shell程序,如果传递了一个退出函数,则exit函数需要传递退出值。因此,exit 45
应该返回45作为值,但不能打印*。
命令被传递给char **arglist
数组中的函数解析器。由于exit 45
是两个args,我需要打印出最后一个arg。
但是,我的调试语句printf((int)&arglist[1])
返回的值为163393752,与传入的值略有不同。当我将printf
更改为puts
时,打印出正确的值,但exit()
需要整数,而不是指针。
使用此示例如何从指针数组中获取45?
据教授说,*逐字引用他的措辞。答案 0 :(得分:2)
在atoi
中查找stdlib.h
函数(如果不允许使用该库,则编写自己的等效函数。)
答案 1 :(得分:1)
printf
需要格式字符串;查看man page
(int)&arglist[1]
应为arglist[1]
,而char *
不是int
答案 2 :(得分:0)
该printf参数是否传递地址而不是值?应该是* arglist [1]吗? 我的c指针有点生锈。
答案 3 :(得分:0)
问题是&arglist[1]
与&(*(arglist+1)
相同,它实际上打印了arglist [1]的内存中的地址。如果您想在此时打印值,只需打印arglist[1]
- printf()
通常不需要&。
答案 4 :(得分:0)
我想你想做的就是这样:
./your_program # run your_program
ret_val=$? # gets exit status and stores into $ret_val
./other_program $ret_val # pass exit status of your_program to other_program as a argument
但是,将值从一个程序传递到另一个程序并不是一种正确的方法。由于仅使用程序的低8位退出状态,请参阅:http://linux.die.net/man/3/exit。
您可以将值从一个程序传递到另一个程序使用exit
iff 您的目的是通过退出状态(8位数字)而不是退出值(整数)。
将值传递给其他程序的典型方法是打印值:例如:
你的计划:
printf("%d", value);
exit(0);
shell中的:
value=`./your_program` # run your program and store output into 'value'
./other_program $value
在other_program中:使用strtol
(不推荐使用atoi
)将字符串转换为整数:
int value = stdtol(argv[1], NULL, 10);