我想读取向量数组并将其隐藏到双指针以传递另一个 c 方法。我试过这个,但我没有得到这个代码的成功。它给了我错误的值,如"或任何垃圾值。
std::vector<std::string> vec = {"Monday", "Tuesday"};
char ** cstrings = new char * [vec.size()];
转换为双指针(指针到指针(
读取时间信息需要终止数组,我知道,我需要添加 NULL 值"\b"。但是我没有成功添加这个。
for (size_t i=0; i<vec.size(); ++i) {
printf("value of i %d n",i);
cstrings[i] = new char[vec[i].size()+1];
std::strcat(cstrings[i],vec[i].c_str());
if(i==vec.size()){
printf("value of i %d n",i);
cstrings[i+1] = new char[vec[i].size()+1];
std::strcat(cstrings[i+1],"/b");
}
}
指针的读取值
读取双指针循环,接收空值时终止。我也没有成功。
for(char **p = cstrings; *p != NULL; ++p){
if( strcmp(*p,"/b") != 0) {
char * temp = *p;
printf(" Read value >> Days >>> %s n",temp);
}
}
输出 :
Read value >> Days >>> Monday
Read value >> Days >>> Tuesday
Read value >> Days >>> // need to terminate for loop for this.
使用 strncpy 而不是 strcat。并指定大小。
cstrings[i] = new char[vec[i].size()+1];
std::strcat(cstrings[i],vec[i].c_str());
应替换为:
cstrings[i] = new char[vec[i].size()+1];
std::strncpy(cstrings[i], vec[i].c_str(), vec[i].size());
cstrings[i][vec[i].size()] = ' ';
更简单的方法是使用 C 函数 strdup:
cstrings[i] = strdup(vec[i].c_str() );