添加 NULL 以终止双指针
add NULL to terminate double pointer
我想读取向量数组并将其隐藏到双指针以传递另一个 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() );
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 使用终止程序的指针在数组中输入字符串
- 如何安全地终止线程?(使用指针)C++
- protobuf "oneof" sub-protobuf 对象指针终止程序
- 添加 NULL 以终止双指针
- 在抛出 std::bad_alloc 实例后终止调用.使用两个类,一个带有指向另一个的指针
- C 在scanf()读取后删除指针导致过程终止
- 为什么一个指向char的C++指针在缺少null终止符的情况下充当字符串
- 当我的程序终止时,我应该总是在COM指针上调用Release吗
- 使用空指针终止变量参数列表
- 智能指针——程序终止时的分段错误
- 带有指针和终止 null 的 For 循环
- 指针-数组交互,无终止符