我想读取矢量数组并将其转换为双指针以传递另一个c方法。我尝试过这个但是我没有为这段代码取得成功。 它给了我错误的价值,如""或任何垃圾价值。
std::vector<std::string> vec = {"Monday", "Tuesday"};
char ** cstrings = new char * [vec.size()];
转换为双指针(指向指针的指针)
读取时间信息需要终止数组,我知道,我需要添加NULL值&#34; \ b&#34; 。但是我没有成功添加它。
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");
}
}
指针读取值
读取双指针循环,在接收Null值时终止。我也没有成功。
for(char **p = cstrings; *p != NULL; ++p){
if( strcmp(*p,"/b") != 0) {
char * temp = *p;
printf(" Read value >> Days >>> %s \n",temp);
}
}
Out Put:
Read value >> Days >>> Monday
Read value >> Days >>> Tuesday
Read value >> Days >>> // need to terminate for loop for this.
答案 0 :(得分:0)
使用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()] = '\0';
更简单的方法是使用C函数strdup:
cstrings[i] = strdup(vec[i].c_str() );