Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符数组到字符串的转换会导致奇怪的字符-套接字_C++_Sockets_Client Server - Fatal编程技术网

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