重新分配未知大小的const char数组

时间:2015-03-05 08:22:56

标签: c++ c arrays char const

所以我在主函数中有这两个数组:

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;
    }
...

我的主要功能告诉我这个“错误:使用未声明的标识符'篮子'”

如何做到这一点有什么好主意?

2 个答案:

答案 0 :(得分:2)

简而言之,您无法在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;
    }

这也可以按照您的预期运作。

答案 1 :(得分:1)

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;