gpt4 book ai didi

c++ - 赋值 char ** 到 char * 中的类型不兼容

转载 作者:行者123 更新时间:2023-11-28 03:40:44 24 4
gpt4 key购买 nike

我有以下代码:

作为全局变量:

char *orderFiles[10];

然后是我的主要方法:

int main(int argc, char *argv[])
{
orderFiles = argv;
}

但是它一直给我一个错误。我做错了什么?

最佳答案

它给你一个错误,因为 char *x[10] 给你一个包含十个不可修改的 char 指针的数组。换句话说,您不能分配给 x,也不能以任何方式更改它。等效的可更改 版本将是 char **orderFiles - 您可以将 argv 分配给它就好了。

顺便说一句,您可以这样将单个参数传输到您的数组:

for (i = 0; i <= argc && i < sizeof(orderFiles)/(sizeof(*orderFiles); i++)
orderFiles[i] = argv[i];

但这似乎相当令人费解。它将用前 N 个参数填充 orderFiles 或部分填充它,使下一个为 NULL。

如果您的意图只是将参数隐藏到一个全局变量中以便您可以在任何地方引用它们,您应该这样做:

#include <stdio.h>

char **orderFiles;
int orderCount;

static void someFn (void) {
int i;
printf ("Count = %d\n", orderCount);
for (i = 0; i < orderCount; i++)
printf ("%3d: [%s]\n", i, orderFiles[i]);
// or, without orderCount:
// for (i = 0; orderFiles[i] != NULL; i++)
// printf ("%3d: [%s]\n", i, orderFiles[i]);
// printf ("Count was %d\n", i);

}

int main (int argc, char **argv) {
orderCount = argc;
orderFiles = argv;
someFn();
return 0;
}

该代码将参数保存到全局变量中,以便可以在不同的函数中访问它们。

如果您还想使用 argc,您应该将两个参数都保存到 main,尽管从技术上讲,这不是必需的,因为 argv[argc] 对于托管环境保证为 NULL - 您可以使用它来检测参数数组的末尾。

关于c++ - 赋值 char ** 到 char * 中的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9338127/

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