据我所知,像
这样的数组int example [10]
只是指向此数组中第一个元素的指针。
char * argv []
是一个指针数组;所以这应该是指向其他指针的指针。
我现在有以下问题:
int main(int argc, char* argv[])
{
double ptrarg2=argv[2][1];
printf("beginletter=%c\nbeginpos=%d\n",&ptrarg2, ptrarg2);
return 0;
}
我正在使用./program test
启动程序并期望输出为:
beginletter=c
beginpos=123213123
虽然123213123
应该是实际存储c的地址。
我实际上得到了:
beginletter=
beginpos=0
我做错了什么?提前谢谢!
答案 0 :(得分:4)
看起来argv[0]
将是"./program"
,argv[1]
将是"test"
,而argv[2]
将是未定义的或NULL你没有三个论点。 argc
的值应该告诉您argv[]
中有多少项。我在这种情况下的猜测是答案为2,因此只有前两个(argv[0]
和argv[1]
)有效。
这里还有其他一些奇怪的事情。 ptrarg2
被声明为double,而不是char;这里的行为是将字符转换为浮点数字等价物并存储它。也许你的意思是ptrarg2
成为一个角色?
接下来,printf()
与其他参数不太一致。 &ptrarg2
是double *
,但您将其分配给%c
(字符)字段,而不是%p
(指针)字段。 ptrarg2
是double
,但您将其分配给%d
(十进制数字)字段,而不是%lf
(长浮点,又称双精度)字段。即使您的类型不匹配,printf
也会愉快地尝试打印出值,但它们会出错,并且崩溃是非常可能的。
答案 1 :(得分:1)
&ptrarg2
是局部变量的地址,它不是您期望的地址。只需使用argv[1][0]
和argv[1]
即可。 argv[1][0]
将为您提供第一个参数的第一个字符,argv[1]
将为您提供指向第一个参数的指针。
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("beginletter=%c\nbeginpos=%p\n",argv[1][0], argv[1]);
return 0;
}