Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印返回指针的函数数组_C++_Arrays_Pointers - Fatal编程技术网

C++ 打印返回指针的函数数组

C++ 打印返回指针的函数数组,c++,arrays,pointers,C++,Arrays,Pointers,你好,我尝试做一个函数,可以分割我想要的每一个文本。例如,如果我输入apple::google::dsf,定界符是::,那么每个元素都将放在数组中的一个位置。我成功地做到了这一点,但现在我希望能够在我的主应用程序中使用此阵列。因此,我想打印在main函数中返回的数组,而不是打印函数Split()中的数组。所以我的问题是如何做到这一点? 这是我的代码: int main() { string buffer; string delimitor = "::"; unsigned int

你好,我尝试做一个函数,可以分割我想要的每一个文本。例如,如果我输入apple::google::dsf,定界符是::,那么每个元素都将放在数组中的一个位置。我成功地做到了这一点,但现在我希望能够在我的主应用程序中使用此阵列。因此,我想打印在main函数中返回的数组,而不是打印函数Split()中的数组。所以我的问题是如何做到这一点? 这是我的代码:

int main()
{
    string buffer; string delimitor = "::";
    unsigned int param = 0;
    cout << "Please enter how many param: "; cin >> param;
    cout << "Please enter something in the buffer: "; cin >> buffer;
    Split(buffer, delimitor, param);

    system("PAUSE");
    return 0;
}

string* Split(string buffer, string delimitor, unsigned int nbr_param)
{
    string* arr = new string[nbr_param];
    unsigned int start = 0, end = buffer.find(delimitor), count = 0;
    while (end != string::npos)
    {
        arr[count] = buffer.substr(start, end - start);
        start = end + delimitor.length();
        end = buffer.find(delimitor, start);
        count++;
    }
    if (end == string::npos)
    {
        arr[count] = buffer.substr(start, end);
    }

    return arr;
}
intmain()
{
字符串缓冲区;字符串分隔符=“::”;
无符号int参数=0;
cout>param;
缓冲液;
拆分(缓冲区、定界器、参数);
系统(“暂停”);
返回0;
}
字符串*拆分(字符串缓冲区、字符串定界符、无符号整数nbr_参数)
{
字符串*arr=新字符串[nbr_参数];
unsigned int start=0,end=buffer.find(定界符),count=0;
while(end!=string::npos)
{
arr[count]=buffer.substr(start,end-start);
开始=结束+定界符.length();
end=buffer.find(定界器,开始);
计数++;
}
if(end==string::npos)
{
arr[count]=buffer.substr(开始、结束);
}
返回arr;
}

将返回值存储在变量中,然后对其进行迭代

std::string* words = Split(buffer, delimitor, param);
for (std::size_t i = 0; i != param; ++i) {
    std::cout << words[i] << std::endl;
}
delete[] words;
std::string*words=Split(缓冲区、定界器、参数);
对于(std::size_t i=0;i!=param;++i){

std::cout使用
std::vector
推回
片段并完全删除
新的
。可能同样有效,因为返回的向量会由于RVO而移动或构建到位


无论如何,您当然必须将返回值分配给main中的一个变量。现在您只需调用split并放弃该值,就会泄漏在
split

中分配的内存,最好返回
std::vector
,而不是原始指针。
const auto& words = Split(buffer, delimitor); // param is no longer needed.
for (const auto& word : words) {
    std::cout << words[i] << std::endl;
}