从char**到char*的赋值中存在不兼容的类型
Incompatible types in assignment char ** to char *
我有以下代码:
作为全局变量:
char *orderFiles[10];
然后我的主要方法:
int main(int argc, char *argv[])
{
orderFiles = argv;
}
然而,它总是给我一个错误。我做错了什么?
它会给您一个错误,因为char *x[10]
会给您提供一个由十个字符指针组成的数组,该数组是不可修改的。换句话说,您既不能分配给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 = %dn", 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 %dn", i);
}
int main (int argc, char **argv) {
orderCount = argc;
orderFiles = argv;
someFn();
return 0;
}
该代码将参数保存到全局变量中,以便在不同的函数中访问它们。
如果您也想使用argc
,则应该将两个参数都保存到main
中,尽管从技术上讲,这是不必要的,因为argv[argc]
在托管环境中保证为NULL,您可以使用它来检测参数数组的末尾。
orderFiles是一个const char **
,您不能修改它(数组指针本身)。
您可以尝试分配数组成员(即orderFiles[0]=argv[0],依此类推)。
问题是,初始化时没有长度的数组和初始化时有长度的数组之间存在差异。从全局变量声明中删除10,然后它应该可以工作
原因是argv实际上只是一个char**,但orderFiles是一个由10个char*组成的数组。
orderFiles
有一个隐含的char**
是,但它是恒定的,因为您通过指定大小[10]
将其初始化为链接时间分配的内存块。您应该为数组创建一个非常量char**
,或者可能是argv
中的memcpy
。
就像他们都说了两种不同的数据类型。换句话说,可以这样想:argv是一个c字符串数组,您的orderFiles被声明为单个c字符串。
因此,如何分配orderFiles取决于您要做什么。我通常会遍历argv,以将参数传递给应用程序。请注意,argv[0]是应用程序名称。
- Winpcap Findalldevs const char * 与 char * 不兼容
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- C++ 类型 "char" 的参数与类型 "const char" 的参数不兼容
- 类型 "const char *" 的参数与类型 "char *" 的参数不兼容
- 类型 "const char*" 的参数与类型 "char*" 的参数不兼容。但是为什么?:(
- 类型 "const char*" 的参数与类型 "Person" 的参数不兼容
- 类型 "const char *" 的参数与类型 "LPCWSTR" 的参数不兼容
- 创建进程使用路径时出现错误事件:类型 "char *" 的 E0167 参数与类型 "LPWSTR" 的参数不兼容
- 类型 "const char *" 的默认参数与类型 "char *" 的参数不兼容
- 类型 "const char *" 的参数与 "LPSTR" C++ 类型的参数不兼容
- 类型"std::array<char,6>"和"char"不兼容
- 为什么 const char 数组成员的初始化在构造函数初始值设定项中不兼容
- 类型 "unsigned char *" 的参数与类型 "const char *" 的参数不兼容
- 操作数类型不兼容("int"和"const char*")
- MKDIR 在 C++ 系统调用中失败 - int 类型的参数与 const char* 类型的参数不兼容
- 错误:在 GEANY 中将"int"赋值为"char [1]"时类型不兼容
- 类型 "char *" 的参数与类型 "LPWSTR" 的参数不兼容
- 将“char”分配给“char [100]”的类型不兼容
- 错误:操作数类型不兼容("int"和"const char*")c++
- 'WCHAR* 类型的参数与"const char*"不兼容"