gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:42:13 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com