Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++ Fstream未从二进制数据(C+;+;)读取完整结构_C++_String_Struct_Binary_Fstream - Fatal编程技术网

C++ Fstream未从二进制数据(C+;+;)读取完整结构

C++ Fstream未从二进制数据(C+;+;)读取完整结构,c++,string,struct,binary,fstream,C++,String,Struct,Binary,Fstream,我一直在尝试让我的程序使用Ofstream::write()将字符串写入二进制文件,但我找不到如何(通过互联网络),所以我尝试将带有字符串的结构写入文件。这很好地发挥了作用;我可以打开文件并读取字符串(用人眼),但当我尝试使用Ifstream::read()读取结构时,我只得到一个空字符串和我编写的字符串(在本例中,“dir”是空字符串,“fileName”被正确读取)。 感谢所有帮助:) PS:两个字符串都保存在文件中。。。 这是我的写作代码: StringStruct texPath; te

我一直在尝试让我的程序使用Ofstream::write()将字符串写入二进制文件,但我找不到如何(通过互联网络),所以我尝试将带有字符串的结构写入文件。这很好地发挥了作用;我可以打开文件并读取字符串(用人眼),但当我尝试使用Ifstream::read()读取结构时,我只得到一个空字符串和我编写的字符串(在本例中,“dir”是空字符串,“fileName”被正确读取)。 感谢所有帮助:) PS:两个字符串都保存在文件中。。。 这是我的写作代码:

StringStruct texPath;
texPath.dir = "src/Assets/";
texPath.fileName = "bricks_top.png";
file.write((char*)&texPath, sizeof(texPath));
这是我的阅读代码:

StringStruct texFile;
file.read((char*)&texFile, sizeof(texFile));
std::string filepath = "";
filepath += texFile.dir;
filepath += texFile.fileName;
std::cout << filepath;

好的,我收到一些评论(感谢manni66),说我必须以c字符串的形式编写。因此,我将结构更改为:

struct StringStruct {
    char* dir = "src/Assets/";
    char* fileName = "Example.png";
};

所以我把每个字符串都写成了c字符串。

好的,我收到一些评论(感谢manni66),说我必须写成c字符串。因此,我将结构更改为:

struct StringStruct {
    char* dir = "src/Assets/";
    char* fileName = "Example.png";
};

因此,我将每个字符串改为c字符串。

嗯,是的,这肯定行不通。您只能将POD写入这样的文件。您需要一个POD类型来反/派生普通数据。您必须将每个字符串作为c_str()写入文件。哇。那很快。。。我将尝试将结构中的字符串更改为char*s.Um是的,这肯定行不通。您只能将POD写入这样的文件。您需要一个POD类型来反/派生普通数据。您必须将每个字符串作为c_str()写入文件。哇。那很快。。。我将尝试将结构中的字符串更改为char*s。您确实不想这样做。学习如何使用和序列化
std::string
,你会比使用裸指针指向裸字符串要好得多。你真的不想这样做。学习如何使用和序列化
std::string
,您将比使用裸字符串的裸指针要好得多。