C++ 无法完全返回向量集{}

C++ 无法完全返回向量集{},c++,vector,C++,Vector,我的返回值v;仅返回单个集合{}: 输出: 198397652 2014-11-14 15:10:10 Buy 0.00517290 0.00100000 0.00100000 0.00000517 198397652 2014-11-14 15:10:10 Buy 0.00517290 0.00100000 0.00100000 0.00000517 预期产出: 198397652 2014-11-14 15:10:10 Buy 0.00517290 0.00100000 0.0010000

我的返回值v;仅返回单个集合{}:

输出:

198397652
2014-11-14 15:10:10
Buy
0.00517290
0.00100000
0.00100000
0.00000517
198397652
2014-11-14 15:10:10
Buy
0.00517290
0.00100000
0.00100000
0.00000517
预期产出:

198397652
2014-11-14 15:10:10
Buy
0.00517290
0.00100000
0.00100000
0.00000517
198397685
2014-11-14 15:10:13
Buy
0.00517290
0.00100000
0.00100000
0.00000517
198398295
2014-11-14 15:11:14
Buy
0.00517290
0.00100000
0.00100000
0.00000517
203440061
2014-11-21 16:13:13
Sell
0.00825550
0.00100000
0.00100000
0.00000826
代码:

我的代码应该从一个向量中收集多个记录集{},但只返回一个集{}或段错误,或者两者都返回。取决于版本。
. std::cout在getmybuyData函数中,您可以无条件地从do while循环外部内部的函数返回。关于您的分段错误,请在调试器中运行,它将在崩溃的位置停止,让您检查并遍历函数调用堆栈以及变量的值。如果您没有从markData返回任何内容,您将拥有。是否在启用额外警告的情况下生成?如果没有,则在构建时添加例如-墙-Wextra。添加返回vd;为了标记数据,排除了段错误。但仍然只返回一条记录。感谢-Wall-WextraWell的提示,如果你没有从一个函数返回任何应该返回的东西,那么你就有了未定义的行为,这通常会导致崩溃或其他奇怪的行为。我的意思是,如果删除getmybuyData中现有的return语句,则根本不返回任何内容,这将导致markData出现问题,因为您希望getmybuyData返回某些内容。
#include <iostream>
#include <vector>
#include <string>
#include <cstring>


std::vector<std::string> getmybuyData()
{
        FILE *fp = stdio;
        if (fp == NULL) perror ("Error opening file");
        char buydbuff[BUFSIZ];
        bool more = true;
        do{
                std::vector<std::string> v;
                for (int i=0; (i < 7) && (more = (fgets(buydbuff, BUFSIZ, fp) != NULL)); ++i){
                        size_t n = strlen(buydbuff);
                        if (n && buydbuff[n - 1] == '\n') buydbuff[n - 1] = '\0';
                        v.push_back(buydbuff);
                        //return v;
                }
                for(int p = 0; p < v.size(); ++p){
                        std::cout << v[p] << std::endl;
                }
        return v;
        } while (more);
}

std::vector<std::string> markData(){
        std::vector<std::string> vd;
        vd = getmybuyData();
        for (int j=0; j < vd.size(); ++j)
        {
                std::cout << vd[j] << std::endl; //main goal is to print data here.
        }

        return vd;
}
int main()
{
        markData();
}