如何从数组中打印出指针值?

时间:2011-04-24 03:57:33

标签: c pointers

我知道这是基本的东西,但我遇到了一个特别的问题。

我正在实现一个简单的shell程序,如果传递了一个退出函数,则exit函数需要传递退出值。因此,exit 45应该返回45作为值,但不能打印*。

命令被传递给char **arglist数组中的函数解析器。由于exit 45是两个args,我需要打印出最后一个arg。

但是,我的调试语句printf((int)&arglist[1])返回的值为163393752,与传入的值略有不同。当我将printf更改为puts时,打印出正确的值,但exit()需要整数,而不是指针。

使用此示例如何从指针数组中获取45?

据教授说,*逐字引用他的措辞。

5 个答案:

答案 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);