将 Double 复制到 C++ 中的 void 指针 [关闭]
Posted
技术标签:
【中文标题】将 Double 复制到 C++ 中的 void 指针 [关闭]【英文标题】:Copying Double to a void pointer in C++ [closed] 【发布时间】: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 的末尾,则只复制它的一部分,接收器将失败。
【参考方案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,它完全符合我的要求。以上是关于将 Double 复制到 C++ 中的 void 指针 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从 int|double 到 string 的转换的简洁 C++ 习语是啥? [复制]
如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]
无法将参数 '1' 的 'double' 转换为 'double*' 到 'void Swap(double*, double*)'