重新分配大小未知的 const char 数组
Reassigning const char array with unknown size
所以我的主要函数中有这 2 个数组:
const char* basket[];
const char* basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
...
if (strcmp (c_id,"somebasketid") == 0){
basket = basket_peach;
}
...
如果我尝试这样做:
...
if (strcmp (c_id,"somebasketid") == 0){
const char* basket[] = basket_peach;
}
...
我的主要功能告诉我这个“错误:使用未声明的标识符 'basket'”
知道怎么做吗?
简单地说,你不能在C和C++中给数组赋值。
此外,以下甚至无法编译:
const char* basket[];
必须使用显式大小(在 []
内)或编译器可以从中推导出大小的初始化列表来声明数组。
如果你正在编写 C++,你真正需要的是 vector
:
std::vector<const char*> basket;
std::vector<const char*> basket_peach = {"1 1111 2 0000","2 2222 2 0000", 0};
...
if (strcmp (c_id,"somebasketid") == 0){
basket = basket_peach;
}
以上将按您的预期工作。更好的是,将 const char*
也替换为 string
:
std::vector<std::string> basket;
std::vector<std::string> basket_peach = {"1 1111 2 0000","2 2222 2 0000", ""};
... NOTICE THIS! ^^
if (c_id == "somebasketid"){
basket = basket_peach;
}
这也会像您预期的那样工作。
您需要 basket
的空间
const char* basket[]; /* Array of pointers with 0 length */
const char* basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
应该是
const char *basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
const char *basket[sizeof(basket_peach) / sizeof(basket_peach[0])];
basket = basket_peach;
你不能用这种方式给数组赋值,使用循环:
for (size_t i = 0; i < sizeof(basket) / sizeof(basket[0]); i++) {
basket[i] = basket_peach[i];
}
或将basket
声明为指向指针的指针:
const char *basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
const char **basket;
...
basket = basket_peach;
所以我的主要函数中有这 2 个数组:
const char* basket[];
const char* basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
...
if (strcmp (c_id,"somebasketid") == 0){
basket = basket_peach;
}
...
如果我尝试这样做:
...
if (strcmp (c_id,"somebasketid") == 0){
const char* basket[] = basket_peach;
}
...
我的主要功能告诉我这个“错误:使用未声明的标识符 'basket'”
知道怎么做吗?
简单地说,你不能在C和C++中给数组赋值。
此外,以下甚至无法编译:
const char* basket[];
必须使用显式大小(在 []
内)或编译器可以从中推导出大小的初始化列表来声明数组。
如果你正在编写 C++,你真正需要的是 vector
:
std::vector<const char*> basket;
std::vector<const char*> basket_peach = {"1 1111 2 0000","2 2222 2 0000", 0};
...
if (strcmp (c_id,"somebasketid") == 0){
basket = basket_peach;
}
以上将按您的预期工作。更好的是,将 const char*
也替换为 string
:
std::vector<std::string> basket;
std::vector<std::string> basket_peach = {"1 1111 2 0000","2 2222 2 0000", ""};
... NOTICE THIS! ^^
if (c_id == "somebasketid"){
basket = basket_peach;
}
这也会像您预期的那样工作。
您需要 basket
const char* basket[]; /* Array of pointers with 0 length */
const char* basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
应该是
const char *basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
const char *basket[sizeof(basket_peach) / sizeof(basket_peach[0])];
basket = basket_peach;
你不能用这种方式给数组赋值,使用循环:
for (size_t i = 0; i < sizeof(basket) / sizeof(basket[0]); i++) {
basket[i] = basket_peach[i];
}
或将basket
声明为指向指针的指针:
const char *basket_peach[] = {"1 1111 2 0000","2 2222 2 0000", 0};
const char **basket;
...
basket = basket_peach;