Использование std::string в hdf5 создает нечитаемый вывод

В настоящее время я использую hdf5 1.8.15 в 64-разрядной версии Windows 7. Исходный код моего программного обеспечения сохраняется в файлах с использованием кодировки utf8.

Как только я вызываю любую функцию hdf5, поддерживающую std::string, вывод становится загадочным.

введите здесь описание изображения

Но если я использую const char* вместо std::string, все работает нормально. Это относится и к имени файла.

Вот краткий пример:

std::string filename_ = "test.h5";    
H5::H5File file( filename_.c_str(), H5F_ACC_TRUNC); // works

H5::H5File file( filename_, H5F_ACC_TRUNC); // filename is not readable or
                                            // hdf5 throws an exception

Я предполагаю, что эта проблема вызвана разными кодировками, используемыми в моих исходных файлах и hdf5. Но я не уверен в этом и не нашел решения, позволяющего использовать std::strings. Я был бы признателен за любую идею, которая поможет мне в этом вопросе.


person user2445483    schedule 18.08.2015    source источник
comment
Больше похоже на конфликт реализаций стандартной библиотеки или какой-то другой конфликт. Кодировка в вашем исходном файле на 100% не имеет значения.   -  person molbdnilo    schedule 18.08.2015
comment
Хорошо, спасибо за информацию. Вместо использования предоставленных предварительно скомпилированных двоичных файлов я скомпилировал hdf5 самостоятельно, и ошибка исчезла.   -  person user2445483    schedule 18.08.2015
comment
@user2445483 user2445483 Не могли бы вы подробнее описать, что вы сделали? Однако, поскольку у меня такая же проблема, она не исчезла после того, как я самостоятельно скомпилировал файлы hdf5.   -  person NOhs    schedule 21.04.2016
comment
Хорошо, я нашел проблему (см. ниже).   -  person NOhs    schedule 21.04.2016


Ответы (2)


У меня также была такая же проблема, и я исправил ее, изменив все мои std::string или h5std_string буквально:

5File file("myFile.h5", H5F_ACC_TRUNC);

Или используйте string.c_str(), чтобы изменить строку на const char.

person sorry_I_wont    schedule 07.07.2016

У меня была точно такая же проблема. Решение заключалось в том, что я находился в режиме отладки в Visual Studio, тогда как библиотеки, с которыми я связывался, были собраны в режиме выпуска. Когда я переключился в Visual Studio на Release-Mode, вышеуказанная ошибка исчезла.

person NOhs    schedule 21.04.2016