2015-11-30 220 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?

相關問題