循环中的 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
以遵守传递的长度。
我在以下循环中遇到访问冲突问题。
我的问题:我不知道 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
以遵守传递的长度。