char数组到字符串转换导致奇怪的字符 - 套接字

时间:2013-08-12 18:07:17

标签: c++ sockets client-server

我目前有以下代码

char my_stream[800];
std::string my_string; 
iResult =  recv(clntSocket,my_stream,sizeof(my_stream),0);
my_string = std::string(my_stream);

现在,当我尝试将char数组转换为字符串时,我会在字符串中找到奇怪字符的当前任何关于我可能做错的建议

3 个答案:

答案 0 :(得分:2)

你得到了奇怪的字符,因为你的字符串长度不等于收到的字节数。

你应该像这样初始化字符串:

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 };

答案 1 :(得分:0)

如果你从套接字中读取一个以零结尾的字符串,则不需要转换,它已经是一个字符串。如果它不是已经零终止,你将需要一些其他类型的终结符,因为套接字是流(假设这是TCP)。换句话说,您不需要my_string = std::string(my_stream);

答案 2 :(得分:0)

您是否尝试过直接打印my_stream而不转换为字符串。 据我所知,可能是发送和接收数据格式不匹配的情况。 另一侧的数据可能是其他格式,如Unicode,您可能会尝试将其打印为单字节数组 如果只是字符串的一部分是奇怪的字符,那么肯定与my_stream结尾处的null终止符有关的错误tehn会增加my_stream数组的大小。