【问题标题】:Writing into file using ofstream使用 ofstream 写入文件
【发布时间】: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?为什么要将二进制值写入文本文件?

标签: c++ file printf ofstream


【解决方案1】:

你应该修改以下代码

file_not_binary.write((char*) &router,sizeof(router));
to
file_not_binary.write((char*) &router,strlen(router));

sizeof(router) 是数组的大小, 但 strlen(router) 是 route[i].route_number 的长度。您想将 route_number(int) 写入文件,而不是数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多