2015-08-26 75 views
0

我有嚴重的一個問題掙扎這應該是很容易的:我怎麼做一個簡單的類型轉換(從doublechar*)基本C.如何雙轉換成一個char *

我發現相當多的解決方案,但它們都是基於從doublechar[x]的轉換,但我在這裏的char*而不是char[]。 (我不知道結果字符串會有多長)。最重要的是,我真的不能相信另一種類型(即它是stringstreamstd::strings,...)需要一些簡單的東西。我承認,我是一個基礎C的完全新手,但我曾在其他語言(Visual Basic,Delphi,Java,...),我只是不明白爲什麼我找不到一個簡單的功能,如「to_char_pointer(double d)」來做到這一點。

沒有任何人有一個想法?

+0

更好的問題是什麼,你想幹什麼?一個double不能轉換爲char *。 如果您只是試圖獲取double的字符串表示形式,則必須將其轉換爲char數組。接受char *的函數將接受char []。 –

+0

對不起,我還是挺強調,當我寫了這樣一個問題:看來,我有機會獲得STL庫,因此我的問題已經解決: '#包括'
'使用命名空間std;'

' string str = to_string((long double)vector_with_doubles-> at(i));'
因此這個問題確實可以關閉。 – Dominique

回答

0

您可以使用sprintf()來將double轉換爲字符串,但我實際上建議使用_snprintf(),因爲sprintf()不考慮字符串是固定長度設備在內存中,如果你不看它,會溢出。 _snprintf()允許你指定輸出字符串的長度,只要確保將大小指定爲小於實際分配的內存塊的大小即可,因爲_snprintf()如果必須縮短輸出,_snprintf()不會存儲終止空字符。

我們使用_snprintf(一個例子)是:

void ToString(char * outStr, int length, double val) 
    { 
     _snprintf(outStr,length,"%f",val); 
    } 
+0

使用'snprintf()'(標準的C函數)而不是'_snprintf()'(非標準的C函數)肯定更加便攜。使用sprintf()來代替'sprintf()'來防止溢出是一個好的第一步,但是檢查函數的結果和處理是在這裏丟失的必要部分。 – chux