循环中的 BadPtr 访问冲突将 char** 转换为 std::vector<string>

BadPtr Access Violation in loop-while to convert char** into std::vector<string>

我在以下循环中遇到访问冲突问题。 我的问题:我不知道 char*char** 参数的数量。所以我不能做类似

的事情
for (int i=0; i<size; i++){...}

我的代码如下:

void vecCharPtr2StrVec(const char** params, std::vector<string> &s_paramVec){

int idx = 0;
const char *name = params[idx++];

string s_name;
while(name != NULL){
    s_name = string(name);
    s_paramVec.push_back(s_name);
    name = params[idx++];
} }

它填充了 s_paramVec,但在最后一个 s_name 被推回后访问 0xcccccccc 的错误位置。

如何做停止条件?

非常感谢。

您的代码隐式假定有一个 NULL 终止符。看来你没有把它放在数组中。

试试这个:

std::vector<string> v;
const char *params[] = {"a", "b", "c", NULL};
vecCharPtr2StrVec(params, v);
std::cout << v[2] << std::endl;

另一种选择是传递参数的长度:

std::vector<string> v;
const char *params[] = {"a", "b", "c"};
vecCharPtr2StrVec(params, sizeof(params)/sizeof(params[0]), v);
std::cout << v[2] << std::endl;

...但这需要更改 vecCharPtr2StrVec 以遵守传递的长度。