我有以下几段代码:
作为全局变量:
char *orderFiles[10];然后是我的主要方法:
int main(int argc, char *argv[])
{
orderFiles = argv;
}然而,它总是给我一个错误。我做错了什么?
发布于 2012-02-18 11:13:13
它会给你一个错误,因为char *x[10]给了你一个十个字符指针的数组,这个数组是不可修改的。换句话说,您不能将其赋值给x,也不能以任何方式更改它。等效的可变版本是char **orderFiles -您可以将argv分配给它。
另外,您可以将单个参数传递到数组中,如下所示:
for (i = 0; i <= argc && i < sizeof(orderFiles)/(sizeof(*orderFiles); i++)
orderFiles[i] = argv[i];但这似乎相当复杂。它要么用第一个N参数填充orderFiles,要么部分填充它,使下一个参数为空。
如果您的目的只是简单地将参数隐藏到全局变量中,以便可以在任何地方引用它们,那么您应该这样做:
#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 -您可以用它来检测参数数组的结尾。
发布于 2012-02-18 11:06:48
orderFiles是一个const char **,你不能修改它(数组指针本身)。
您可以尝试分配数组成员(例如orderFiles = argv等等)。
发布于 2012-02-18 11:08:59
问题是,在没有长度的情况下初始化的数组和使用长度初始化的数组之间存在差异。从全局变量声明中删除10,然后它就可以工作了
这样做的原因是,argv实际上只是一个字符**,而orderFiles是一个包含10个字符*的数组。
https://stackoverflow.com/questions/9338127
复制相似问题