char数组到字符串的转换会产生奇怪的字符-套接字
char Array to string conversion results in strange characters - sockets
我目前有以下代码
char my_stream[800];
std::string my_string;
iResult = recv(clntSocket,my_stream,sizeof(my_stream),0);
my_string = std::string(my_stream);
现在,当我试图将char数组转换为字符串时,我会在字符串中看到奇怪的字符——任何关于我可能做错了什么的建议——
因为字符串长度不等于接收到的字节数,所以您会得到奇怪的字符。
您应该这样初始化字符串:
char* buffer = new char[512];
ssize_t bytesRead = recv(clntSocket,buffer,512,0);
std::string msgStr = std::string(buffer,bytesRead);
delete buffer;
最常见的解决方案是在读取任何内容之前将缓冲区的每个字节归零。
char buffer[512];
buffer = { 0 };
如果您正在从套接字读取一个以零结尾的字符串,则不需要转换,它已经是一个char字符串了。如果它还没有零终止,您将需要其他类型的终止符,因为套接字是流(假设这是TCP)。换句话说,您不需要my_string = std::string(my_stream);
您是否尝试直接打印my_stream而不转换为字符串。据我说,这可能是发送和接收的数据格式不匹配的情况。另一侧的数据可能是其他格式,如Unicode,您可能正在尝试将其打印为单字节数组如果字符串中只有一部分是奇怪的字符,那么它肯定是与mystream末尾的null终止符有关的错误。缺少tehn会增加mystream数组的大小。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 字符数组中的十六进制导致写入套接字时出现随机字符
- Java 套接字读取在第二次读取时返回奇怪字符
- 如何在套接字上发送矢量<无符号字符>
- 跨平台套接字发送,Linux 上的缓冲区常量无效* Windows上的常量字符*,最佳处理方式
- 如何使用 boost asio 通过 UDP 套接字发送无符号字符的 std::vector?
- 从套接字到字节数组的读取数据中的意外字符
- C++ Linux 套接字在字符 *msg 中添加变量
- C/C++ 中的套接字编程 - gcc 字符 * 警告
- 套接字Java到C++-消息的长度总是8192个字符
- 通过套接字发送时,字符变为int
- 从安卓客户端发送数据时,C++ 套接字接收函数中第一个字符中的 NUL 值
- 如何将 BYTE 数组转换为字符数组以使用套接字 C++ 发送
- 打印从套接字收到的字符,一次一个
- char数组到字符串的转换会产生奇怪的字符-套接字
- 多线程:字符移动、绘图和套接字处理
- 通过Boost ASIO TCP发送文件,如何流字符数组到套接字
- 将字符缓冲区类型转换为来自套接字的结构
- 可以通过TCP套接字发送的最大字符大小