C argv[2]++ 与 (char*)argv[2]++?

标签 c char argv

为什么 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/

相关文章:

c - 在 C 文件中写入数字的最有效方法?

c - 在Linux上的Assembly 64中实现strcmp功能

c - FMOD功能的实现

c - 为什么在这个char数组中加入一个int,并没有加入相同值的ASCII字符呢?

c - fgets() 没有扫描我想要的字符串数

shell - Cygwin bash -c 根据命令是否以 c 开头 :/or something else 产生不同的 argc

c - 如何将命令行参数读入 C 中的双数组/vector ?

javascript - 使用 Node 运行程序时检查是否给出 ARGV

c - 打印结构的数组结构

c - Linux 和 Windows 之间 fwrite 的不同行为