gpt4 book ai didi

C++ 常量截断

转载 作者:可可西里 更新时间:2023-11-01 18:05:01 27 4
gpt4 key购买 nike

我收到这个警告

warning C4309: 'initializing' : truncation of constant value

当我尝试执行我的 dll 时,它只发送 4 个字节而不是 10 个字节。
有什么问题吗?

这是我的代码:

int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
{

cout << "[SEND:" << len << "] ";

for ( int i = 0; i < len; i++ ) {
printf( "%02x ", static_cast<unsigned char>( buf[i] ) );
}

printf("\n");

//causing the warning:
char storagepkt[] = {0x0A, 0x00, 0x01, 0x40, 0x79, 0xEA, 0x60, 0x1D, 0x6B, 0x3E};

buf = storagepkt;
len = sizeof(storagepkt);

return pSend(s, buf, len, flags);
}

更新

int (WINAPI *pSend)(SOCKET s, const char* buf, int len, int flags) = send;
int WINAPI MySend(SOCKET s, const char* buf, int len, int flags);

更新

按照建议,我尝试了 memcpy:

memcpy((char*) buf, storagepkt, sizeof(storagepkt));

更新

unsigned char storagepkt[] = {0x0A, 0x00, 0x01, 0x40, 0x79, 0xEA, 0x60, 0x1D, 0x6B, 0x3E};

已修复。

最佳答案

您正在初始化一个已签名的 char 缓冲区。超过 0x7f 的任何内容都超出了它的处理能力,将被转换为负数。实际数据可能没问题,您可以忽略该警告,尽管将其设为 unsigned char 会更好。

至于为什么它只发送 4 个字节,这听起来很像一个指针的大小。您确定代码与您使用数组而不是传递给函数的指针所表示的完全一样吗?即使您将参数声明为数组,函数也不知道数组的大小 - 您需要将数组的大小传递给函数。

关于C++ 常量截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com