添加NULL以终止双指针

时间:2018-02-02 14:07:37

标签: c++ arrays pointers vector null

我想读取矢量数组并将其转换为双指针以传递另一个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.

1 个答案:

答案 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() );