将 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 指针 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++,复制集到向量

从 int|double 到 string 的转换的简洁 C++ 习语是啥? [复制]

如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]

无法将参数 '1' 的 'double' 转换为 'double*' 到 'void Swap(double*, double*)'

使用 C++ void 函数操作向量数组

将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用