为什么argvs行为奇怪? 例如:
这将按预期工作,打印第一个参数的第一个字符。
printf("%c", *argv[1]);
然而,这将打印ascii表中的字符(又名“一个更大的”表示为数字)而不是打印第一个参数的第二个字符:
printf("%c", *(argv[1] + 1);
轻微修改无效,完全相同的结果:
printf("%c", *(argv[1] + sizeof(char));
唯一有用的是实际将argv [2]强制转换为char *:
printf("%c", *( (char*)(argv[1] +1 ) );
为什么会这样?我知道:
argv's type := char** argv
and argv[1] == *(argv + 1)
and argv[1]'s type should be char*
但显然它不是,因为我需要施展它?这怎么可能?它被声明为char **,但其成员不是char * s?
答案 0 :(得分:3)
你的问题的前提是错误的。这个计划:
#include <stdio.h>
int main (int argc, char *argv[]) {
printf("%c\n", *(argv[1] + 1));
return 0;
}
使用参数test
运行,打印e
,而不是u
。
答案 1 :(得分:0)
确保您的括号和取消引用确实在您认为的位置。如果argv[1]
包含test
,那么
* ( argv[1] + 1 ) == 'e'
( * argv[1] + 1 ) == 'u'
^ ^
| |
+-+- slight difference here