我有一个需要发送的uchar缓冲区。它无法转换为char。
我有一个示例项目:
send(SOCKET s, void *buf, size_t length) { return send(s, buf, length, 0);
我的尝试是:
err = send( ConnectSocket, (void*)buf, (int)strlen(sendbuf), 0 );
我知道唯一不同的是VS(2008)的版本。
该行不会在我的2010项目中编译。错误是无法将参数2 void *转换为const char *
答案 0 :(得分:1)
试试这个:
err = send( ConnectSocket, (char*)buf, (int)strlen(sendbuf), 0 );
答案 1 :(得分:1)
由于send
需要const char*
而不只是char*
,因此您不能只传递普通void*
,因为C ++不支持隐式转换为/来自{{} {1}}。因此,您必须明确将其转换为void*
或char*
:
const char*
请记住,转换指针并不会神奇地改变缓冲区中数据的签名,因为send不关心任何签名,只是复制原始数据。
但至于为什么它与VS2008一起使用我不知道,因为C ++没有通过标准隐式地转换为err = send( ConnectSocket, (const char*)buf, (int)strlen(sendbuf), 0 );
。也许void*
的定义不同(我怀疑)或规则只是松懈(非标准符合)。或者也许你把它编译为C,然后通过标准来隐式地转换为send
。