2015-08-26 48 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