【发布时间】:2014-07-10 23:39:16
【问题描述】:
我有包含三种类型的结构,我正在尝试将其写入我的 txt 文件。毕竟,当我打开我的文件时,我得到了包含信息的字符,并且整数被转换为二进制符号。我使用了函数
sprintf_s(router, "%d" , route[i].route_number);
将我的 int 转换为 char。毕竟这个 int 被转换了,我可以看到我的 digit ,但是除了 chars 我仍然得到一些垃圾。这是我的代码。我做错了什么?
ofstream file_not_binary("D:\\nobin.txt",ios::out);
char router[10];
for(int i=0;i<n;i++){
sprintf_s(router, "%d" , route[i].route_number);
file_not_binary.write((char*) &router,sizeof(router));
file_not_binary.write((char*) &route[i].destination ,sizeof(router));
file_not_binary.write((char*) &route[i].route_number, sizeof(router));
}
我得到这样的东西: 23 юююююююrivne НННН 基辅 Н394 ююююююrivne ННННЉ ээээ«« 我输入:23 rivne kiev,kiev 394 rivne。
【问题讨论】:
-
Ixnay 在指针转换上,认真的。如果你认为你需要一个指针转换,那你就错了,或者 API 坏了。
-
最后两个
sizeof(router)s应该分别是sizeof(route[i].destination)和sizeof(route[i].route_number)。 -
你得到垃圾是因为你正在从
router写垃圾,它在空终止符之后。这是一个坏主意,但当文件以文本模式打开时尤其糟糕。 -
你的结构是什么样的,为什么要写两次
route_number?为什么要将二进制值写入文本文件?