【发布时间】:2015-12-21 06:54:00
【问题描述】:
为什么 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?
【问题讨论】:
-
如果你想索引字符,为什么不
argv[1][0]、argv[1][1]等呢? -
您在第二个 sn-p 中缺少
)。也许如果你修复它,它会按预期工作。更新:第三个。第四。 -
向我们展示真实的代码及其惊人的输出,
-
您声称获得的输出将来自
*argv[1]+1, not*(argv[1]+1)`。