2017-03-18 24 views
0

我需要使用写入功能不< <运营商写浮动的价格上的文件,但它崩溃我怎样才能将浮点数转换为字符以便在C++中使用写入函数写入文件?

int addDevice(fstream & f, Device & d) 
    { 
     char buffer[200]; 
     strcpy(buffer, d.id); 
     strcat(buffer, "#"); 
     strcat(buffer, d.name); 
     strcat(buffer, "#"); 
     short length = strlen(buffer) + sizeof(d.price); 
     char c = '$'; 
      f.seekp(0, ios::end); 
      f.write((char*) & c, 1); 
      f.write((char*)&length, sizeof(length)); 
      f.write(buffer, length); 
      f.write((char *) & d.price, sizeof(float)); 
      f.write((char *)'#', 1); 
      f.seekp(0, ios::beg); 
      return length; 
    } 
+0

你怎么能指望任何人来帮助你的时候,我们不能看到什么'Device'是什么?制作[mcve]。 – nwp

回答

1

的问题很可能是线路

f.write((char *)'#', 1); 

这重新诠释了'#'数值(即35)作为存储器地址,将该地址解引用,并将该地址的字节写入f,如果该地址有效的话,则不然。这是你得到未定义的行为,并可能崩溃(虽然你不能依靠它,这种事情总是崩溃)。

我想你想

f.put('#'); 
+0

我真的很感激,我花了很多时间试图修复:“D –

+0

但是f.put('#),在读第二条记录时出了问题,我删除了它并且工作正常 –

相关问题