【问题标题】:How to convert a double into a char* [duplicate]如何将双精度转换为字符 * [重复]
【发布时间】:2015-08-26 14:40:45
【问题描述】:

我正在为一个应该很简单的问题苦苦挣扎:如何在基本 C 语言中进行简单的类型转换(从 doublechar*)。

我找到了很多解决方案,但它们都是基于从doublechar[x] 的转换,但我在这里使用的是char*,而不是char[]。 (我不知道生成的字符串会有多长时间)。
最重要的是,我真的不敢相信这么简单的事情还需要另一种类型(stringstreamstd::strings、...)。

我承认,我完全是 C 语言的新手,但我使用过其他语言(Visual Basic、Delphi、Java 等),我就是不明白为什么我找不到一个简单的像“to_char_pointer(double d)”这样的函数来做到这一点。

有人有想法吗?

【问题讨论】:

  • 更好的问题是你想做什么? double 不能转换为 char*。如果您只是想获得双精度的字符串表示,则必须将其转换为 char 数组。接受 char* 的函数将接受 char[]。
  • 对不起,我写这个问题的时候压力很大:看来我可以访问STL库,因此我的问题已经解决了:#include <string>
    using namespace std;

    string str = to_string((long double)vector_with_doubles->at(i));
    所以这个问题确实可以结束了。

标签: c++ char double type-conversion


【解决方案1】:

您可以使用 sprintf() 就像将双精度数转换为字符串一样,但我实际上建议使用 _snprintf() ,因为 sprintf() 不考虑字符串是内存中的固定长度设备这一事实如果你不看它就会溢出。 _snprintf() 允许您指定输出字符串的长度,只需确保将大小指定为比实际分配的内存块小一,因为 _snprintf() 如果必须将输出缩短,则不会存储终止的空字符.

我们使用 _snprintf() 的一个例子是:

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

【讨论】:

  • 使用snprintf()(标准C 函数)而不是_snprintf()(非标准C 函数)当然更便于移植。使用任何一个而不是 sprintf() 来防止溢出是一个很好的第一步,但检查函数的结果和处理是这里缺少的必要部分。
猜你喜欢
  • 2017-10-06
  • 2014-01-06
  • 1970-01-01
  • 2018-04-03
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多