2015-02-09 46 views
-1

我正在一个C++应用程序中读取一个csv文件,并将内容存储在双精度矩阵和struct tm向量中。我有一些与此类似:如何使C++中的struct tm向量在strptime上工作?

#include <iostream> 
#include <time.h> 
#include <vector> 

using namespace std; 

int main(){ 
    vector<struct tm> tmTM; 
    strptime("20020202", "%Y%m%d", &tmTM[0]); 
    cout << tmTM[0].tm_year << endl; 
    cout << tmTM[0].tm_mday << endl; 
    cout << tmTM[0].tm_mon << endl; 
    return 0; 
} 

Unfortunly这段代码生成一个错误分割故障(核心转储) 我在C++初学者,所以我不知道什么是错的代码。 非常感谢!

+1

你的载体是空的,但你访问它不存在的第一个元素。 – juanchopanza 2015-02-09 19:03:29

+0

我应该使用这样的memset吗? 'memset(&tmTM [0],0,sizeof(struct tm));' – user3010850 2015-02-09 19:06:33

+0

不知道如何使用'std :: vector'(或者其他任何你使用的库代码。非常安全。) – juanchopanza 2015-02-09 19:08:03

回答

1

vector的默认构造函数生成一个空向量。这意味着的任何访问元素,甚至元素[0]都将导致未定义的行为。

处理此问题的常用方法是使用临时变量,然后使用push_back将临时放置到向量中。

struct tm temp; 
strptime("20020202", "%Y%m%d", &temp); 
tmTM.push_back(temp);