首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >赋值char ** to char *中的类型不兼容

赋值char ** to char *中的类型不兼容
EN

Stack Overflow用户
提问于 2012-02-18 11:02:34
回答 5查看 1.2K关注 0票数 0

我有以下几段代码:

作为全局变量:

代码语言:javascript
运行
复制
char *orderFiles[10];

然后是我的主要方法:

代码语言:javascript
运行
复制
int main(int argc, char *argv[])
{
    orderFiles = argv;
}

然而,它总是给我一个错误。我做错了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-18 11:13:13

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

另外,您可以将单个参数传递到数组中,如下所示:

代码语言:javascript
运行
复制
for (i = 0; i <= argc && i < sizeof(orderFiles)/(sizeof(*orderFiles); i++)
    orderFiles[i] = argv[i];

但这似乎相当复杂。它要么用第一个N参数填充orderFiles,要么部分填充它,使下一个参数为空。

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

代码语言:javascript
运行
复制
#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 -您可以用它来检测参数数组的结尾。

票数 2
EN

Stack Overflow用户

发布于 2012-02-18 11:06:48

orderFiles是一个const char **,你不能修改它(数组指针本身)。

您可以尝试分配数组成员(例如orderFiles = argv等等)。

票数 0
EN

Stack Overflow用户

发布于 2012-02-18 11:08:59

问题是,在没有长度的情况下初始化的数组和使用长度初始化的数组之间存在差异。从全局变量声明中删除10,然后它就可以工作了

这样做的原因是,argv实际上只是一个字符**,而orderFiles是一个包含10个字符*的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9338127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档