2015-11-30 173 views
0

我试图将char []转换为std :: string。到处都是我看到的,我找到了相同的答案,字符串有一个构造函数来完成这件事。 问题是,它不适合我。如何将char []转换为std :: string

这里是我的代码:

std::string getKey(double xTop,double yTop,double zTop,double xBottom,double yBottom,double zBottom,double zGridPoint) 
{ 
     std::string outfile = correctPath(getCurrentDirectory().toStdString()) + "keys.txt"; 
     FILE *f; 
     f= fopen(outfile.c_str(),"a"); 
     char buffer[100]; 
     double s; 

     if((zBottom-zTop) ==0) 
     { 
      sprintf(buffer,"%e %e %e", xTop, yTop, zTop); 
     }else 
     { 
      s=(zGridPoint - zTop)/(zBottom - zTop); 
      sprintf(buffer,"%e %e %e",xTop+ s*(xBottom - xTop), yTop+ s*(yBottom - yTop), zGridPoint); 

     } 

     std::string ret (buffer); 
     fprintf(f,"buffer: %s ; ret: %s\n",buffer,ret); 
     fclose(f); 
     return ret; 
} 

的fprintf中是检查我的字符串是正确的,这isn't的情况。 缓冲区得到正确打印,但ret给我一些奇怪的迹象,我不能在这里读取或重现。

有没有人看到我的代码有问题?

谢谢

+0

试试fprintf中(F,“缓冲区:%s的; ret:%s \ n“,&buffer,ret); – hanshenrik

+0

'%s'不能与'std :: string'一起使用。尝试'fprintf(...,ret.c_str());' – Shloim

+1

@hanshenrik不,这是不正确的。 –

回答

2

ret不是char*。然而,printf%s说明符需要char*(即,C风格的字符串)。

您可以使用printfret.c_str()(这使得你的字符串是不必要的,因为你把它转换右后卫的字符数组)或C++输出设备:

fprintf(f, "buffer: %s ; ret: %s\n", buffer, ret.c_str()); 

std::ofstream f(outfile); 
f << ret << std::endl; 
f.close(); 
+0

谢谢,文件流的工作原理。 – Myrkjartan

1

您无法使用%s将字符串对象传递到printf中。

您需要通过ret.c_str()作为参数,或者更好的是使用cout

更多在这里阅读:C++ printf with std::string?

相关问题