双指针作为参数
Double pointer as parameter
我有以下原型:
int Split(const char* str, const char* delim,unsigned int& numtokens,char **tokensRes)
最后一个参数用于返回此函数的响应。在函数中,我们有以下内容:
.
.
char **tokens =(char**) calloc(tokens_alloc, sizeof(char*));
.
.
.
//at the end of the code
tokensRes = tokens;
.
当返回函数的返回时,直接变量的令牌值char**
我收到正确的答案,但是使用上面的方法,函数的返回为空。如何使此功能正常工作?
编辑 1:我的目的是接收一个字符数组数组,例如:
array[0] = "ABC"
array[1] = "ABC"
array[2] = "ABC"
array[3] = "ABC"
将原型从:
int Split(const char* str, const char* delim,unsigned int& numtokens,char **tokensRes)
自:
int Split(const char* str, const char* delim,unsigned int& numtokens,char ** &tokensRes)
代码tokensRes = tokens;
将起作用。了解原因 了解有关C++和参考的更多信息。
如果您打算从 C 编码风格转向C++式编码,则有关使用字符串的其他答案是有效的。编码的易用性会提高很多,不用担心内存管理和指针(不经常),这些都是由类自动完成的。也不用担心性能下降,只要您遵循良好做法,例如通过引用而不是值传递对象。
假设你想返回一个字符串数组 ( char**
),那么你需要传递一个指针,指向你可以分配的数组。也就是说,您需要传递一个char***
并像*tokensRes = tokens
一样分配它。
只需放弃普通的 C 类型并使用C++类型:
std::vector<std::string> Split(std:;string const& str, std::string const& delim, unsigned int& numtokens);
如果你必须坚持使用 C 接口,你需要一个带有三重指针的额外间接寻址(我假设你想返回一个令牌字符串数组)。
int Split(const char* str, const char* delim,unsigned int& numtokens,char ***tokensRes)
char** tokens;
Split("String;String", ";", 2, &tokens);
我真的很不喜欢输出参数,我总是想知道为什么有人在C++不使用std::string
。
标记化已经在许多库中实现,例如在 boost::split 或 boost::tokenizer 中。无需重新发明轮子:
// simple_example_1.cpp
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
int main(){
using namespace std;
using namespace boost;
string s = "This is, a test";
tokenizer<> tok(s);
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout << *beg << "n";
}
}
simple_example_1的输出为:
This is a test
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 修改函数中的指针(将另一个指针作为参数传递)
- Clang bug?使用指针作为模板参数
- MSVC将仅移动结构参数解释为指针
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何使用非类型模板参数传入指向数组的指针
- 将成员函数指针作为参数传递给模板方法
- 匹配函数指针作为模板参数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 通过智能指针和转换对基本模板参数进行模板推导
- 为函数定义符号不明确的指针参数
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 将函数参数完美转发到函数指针:按值传递呢?
- 保留函数指针模板参数
- 如何构造一个以可变参数指针函数作为成员的类?
- 指向对象的非类型模板参数指针
- c++ 使用 *& as 参数(指针乐趣,三级树方法)