2013-12-09 25 views
-1

使用序列化将char *写入文件中,它正在写入值。但是在尝试读取它给予垃圾值的char *值时是相同的文件。如何使用序列化读取char *

main() 
{ 
    char* FullName = "Ernestine Waller"; 
    char* CompleteAddress = "824 Larson Drv, Silver Spring, MD 20910"; 

    ofstream ofs("fifthgrade.ros", ios::binary); 
    ofs.write((char *)&FullName, sizeof(char*)); 
    cout << sizeof(FullName) << endl << sizeof(CompleteAddress) << endl ; 
    ofs.write((char *)&CompleteAddress, sizeof(char*)); 

    ofs.close(); 

    char* FullName1; 
    char* CompleteAddress1; 

    ifstream ifs("fifthgrade.ros", ios::binary); 
    ifs.read((char *)&FullName1, sizeof(char*)); 
    ifs.read((char *)&CompleteAddress1, sizeof(char*)); 

    cout << "Student Information\n"; 
    cout << FullName1 << endl <<CompleteAddress1 << endl; 
    ifs.close(); 

    return 0; 
} 

读写主要给出正确的值。 但只读

int main() 
{ 
    char* FullName; 
    char* CompleteAddress; 

    ifstream ifs("fifthgrade.ros", ios::binary); 

    ifs.read((char *)&FullName, 8/*sizeof(char*)*/); 

    ifs.read((char *)&CompleteAddress, 8/*sizeof(char*)*/); 

    cout << "Student Information\n"; 
    cout << FullName << endl <<CompleteAddress; 

    return 0; 
} 

给出垃圾值。如何读取char *值?

+2

当你说它正在输出那些字符串时,我不相信你。 – Simple

回答

0

因为代码中存在很多未定义的行为,所以您会收到垃圾值。

sizeof(char*)给出char*指针的大小,而不是字符串的长度。

使用strlen获取字符串长度。

此外,您还需要为接收数据输入的字符串缓冲区分配内存。作为一个起点,例如,使用char fullName1[32];,它给你31个字符加上NULL终止。有更好的方法,但这样做会让你走上正路。

0

当你没有为它们保留内存时,你不能将字符串读入char *。由于您使用的是C++,为什么不使用std :: string而不是char数组并将字符串读入它们。内存管理变成了一个没有问题的问题。

相关问题