【问题标题】:Copying Double to a void pointer in C++ [closed]将 Double 复制到 C++ 中的 void 指针 [关闭]
【发布时间】:2019-03-25 07:21:27
【问题描述】:

我正在将一个双精度值复制到一个 Void*。我如何在 C++ 中做到这一点。

目前我已经在 C++10 中尝试过

strcpy(Trade->MtTr.MPData->MPTrXML.da,dCou);

Trade->MtTr.MPData->MPTrXML.da-->这是一个虚空*

dCou 是双倍的。

strcpy(Trade->MtTr.MPData->MPTrXML.da,dCou);

我希望 void* 应该包含双精度值。 实际上我得到的错误是:

error C2665: 'strcpy' : 2 个重载都不能转换所有参数类型

在尝试匹配参数列表时 '(void *, double)'

【问题讨论】:

  • 你想用void*达到什么目的?
  • 你一定在做一些非常不寻常的事情。请告诉我们更多信息。
  • C++ 是一种严格的类型检查语言,如果没有(通常是功能不良的)强制转换,这种转换不是自动的。
  • 我能想到这样的一个原因是,如果处理一些使用void * 作为通用类型的低级C API。否则,我看不出在纯 C++ 应用程序中可以/应该在哪里使用它。
  • @DanielKamilKozar:真的不好的是strcpy 二进制数据。即使在 C 语言中,在 double 上调用 strcpy 也表明完全缺乏理解。 strcpy 最多复制并包括第一个空字节,它可能存在也可能不存在于double 中。如果不是,则您的内存读取越界,即未定义行为。如果第一个 null 不在 double 的末尾,则只复制它的一部分,接收器将失败。

标签: c++ visual-c++


【解决方案1】:

如果您有正当理由尝试将double 复制到void*,那么一种方法是使用memcpy

#include <cstring>
//..
// Assuming Trade->MtTr.MPData->MPTrXML.da is valid:
double dCou;
//...
memcpy(Trade->MtTr.MPData->MPTrXML.da, &dCou, sizeof(double));

【讨论】:

  • 谢谢@PaulMcKenzie,它完全符合我的要求。
猜你喜欢
  • 2019-09-27
  • 2021-08-14
  • 2015-12-06
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多