我有一個hdf5化合物數據集,它是在Python中構建的,我正在嘗試讀取它。我有四列,其中一個是長度爲1的字符串。我設法讀取除字符串列之外的所有字符。下面是示例代碼,我嘗試只讀的字符串列:從C++中的HDF5讀取複合數據類型的字符串
#include <string>
#include <iostream>
#include "H5Cpp.h"
typedef struct data_type {
char string_column[1];
} data_type;
int main (void)
{
int NBR_OF_ROWS = 28884;
H5::H5File file = H5::H5File(MY_FILE, H5F_ACC_RDONLY);
H5::DataSet dataset = H5::DataSet(file.openDataSet(MY_DATASET));
H5::CompType mtype(sizeof(data_type));
mtype.insertMember("member", HOFFSET(data_type, string_column),
H5::PredType::C_S1);
data_type *data = new data_type[NBR_OF_ROWS];
dataset.read(data, mtype);
std::cout << "string column " << data[0].string_column << std::endl;
return 0;
}
這將編譯但不輸出任何:(我想在堆上分配,但無濟於事數據陣列我用G ++ ubuntu上。 。
任何幫助將非常感激。
你獲得提示,或在程序卡住?如果是這樣,您可以在其他語句之間添加打印語句以查看程序卡住的位置。或者,使用調試器逐行執行。 –
恐怕我收到提示。似乎string_column char只是空的。我嘗試了一些東西,但沒有運氣。我試着在堆上爲每個data_type實例分配char [],但之後我得到了亂碼和valgrind的輸出,抱怨無效讀取。 – fhal
如果你在堆棧中分配的話,你沒有得到那些valgrind錯誤,就像你提問中提供的例子那樣?我看到的唯一可疑的事情是,在聲明'data'時使用可變長度數組,因爲'NBR_OF_ROWS'實際上並不是編譯時常量。變長數組不是標準C++的一部分,但它可能是'g ++'允許它作爲擴展。 –