添加 NULL 以终止双指针

add NULL to terminate double pointer

本文关键字:指针 终止 NULL 添加      更新时间:2023-10-16

我想读取向量数组并将其隐藏到双指针以传递另一个 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() );