C++ 字符数组到字符串的转换会导致奇怪的字符-套接字
我目前有以下代码C++ 字符数组到字符串的转换会导致奇怪的字符-套接字,c++,sockets,client-server,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 my_stream[800];
std::string my_string;
iResult = recv(clntSocket,my_stream,sizeof(my_stream),0);
my_string = std::string(my_stream);
现在,当我尝试将字符数组转换为字符串时,我得到了字符串中存在的奇怪字符任何关于我可能做错了什么的建议如果您正在从套接字读取以零结尾的字符串,则无需进行转换,它已经是一个字符字符串。如果它还没有以零终止,那么您将需要其他类型的终止符,因为套接字是流(假设这是TCP)。换句话说,您不需要
my_string=std::string(my_流)代码>由于字符串长度不等于接收到的字节数,因此会出现奇怪的字符
您应该像这样初始化字符串:
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 };
您是否尝试过直接打印我的_流而不转换为字符串。
据我所知,这可能是发送和接收的数据格式不匹配的情况。
另一端的数据可能采用其他格式,如Unicode,您可能试图将其打印为单字节数组
如果字符串中只有一部分使用了奇怪的字符,那么它肯定是与my_流结尾处的null终止符相关的错误。请增加my_流数组的大小 什么是勾选流?而my_string
是您试图重新分配的字符数组?刚刚更新了代码。需要将字符数组转换为字符串传入字符串中可能包含“\n”,我希望它出现在结果字符串中OK,返回的iResult
是收到的长度。。。您可以通过执行my_stream[iResult]=0来终止它代码>但您需要确保您有空间容纳额外的0“字符”。。。您可以这样做:recv(clntSocket,my_stream,sizeof(my_stream)-1,0)代码>确保首先检查字节读取的实际值。错误时为-1
,断开时为0
。