gpt4 book ai didi

c - 在 C 中打印数组指针中的值

转载 作者:太空狗 更新时间:2023-10-29 17:06:36 25 4
gpt4 key购买 nike

我似乎无法解决问题。我错过了什么?

考虑以下问题

int main(int argc, char *argv[]) {
while ( *argv ) {
printf("argv[] is: %s\n", *argv);
++argv;
}

return 0;
}

这会打印出 argv 的每个值。因此,诸如 ./example arg1 arg2 之类的命令行将输出以下内容:

`argv[] is: ./example`
`argv[] is: arg1`
`argv[] is: arg2`

现在考虑以下(我遇到了麻烦):

int main(void) {
char *days[] = {
"Sunday",
"Monday",
"Tuesday"
};
while ( *days ) {
printf("day is %s\n", *days);
*days++;
}

return 0;
}

如果我尝试编译,我得到错误 cannot increment value of type 'char *[3]'

如果我将 *days++ 更改为 (*days)++ 它会编译。如果我运行它,它会永远运行并最终因 bus error 而失败。

但是,它不会遍历 days[] 的每个值。我什至尝试在 days 数组中以 '\0'"\0" 的形式放入 Null 指针,但没有效果。

我错过了什么?

最佳答案

您的代码中有几个错误:

  1. 变量 argv 和常量 days 是有区别的。变量可以更改,常量数组标签 - 不能。

  2. 在您的数组中,数组末尾缺少终止符 NULL。

  3. *days++; 在这种情况下毫无意义。这是一个虚拟变量,返回值 days,然后递增 days。只用 days++ 就够了。

因此,您的代码必须是这样的:

#include <stdio.h>

int main(void) {
char *days[] = {
"Sunday",
"Monday",
"Tuesday",
NULL
};

// Your style
char **d = days;
while ( *d ) {
printf("day is %s\n", *d);
d++;
}

// Or, more "scholastic" code
for(const char **d = days; *d; d++)
printf("day is %s\n", *d);

return 0;

关于c - 在 C 中打印数组指针中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564766/

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