为什么 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?
最佳答案
你的问题的前提是错误的。该程序:
#include <stdio.h>
int main (int argc, char *argv[]) {
printf("%c\n", *(argv[1] + 1));
return 0;
}
使用参数test
运行,打印e
,而不是u
。
关于C argv[2]++ 与 (char*)argv[2]++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32748320/