我知道关于char数组到字符串转换的信息和线程很多,但是我尝试了很多“解决方案”,但都没有成功。我尝试了这个solution,它与我的问题最接近,但是也没有用。

我有以下代码:

recvlen = recvfrom(s, recvbuf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen);
if (recvlen < 0) {
    printf("socket() failed with error code : %d", WSAGetLastError());
}

string msgrcv(recvbuf, recvlen);
printf("String : %s \n", msgrcv);   //Prints the weird characters
printf("Array : %s \n", recvbuf);  //Prints ok the result

有什么想法我想念的还是错的?

最佳答案

您打印的奇怪字符是未定义行为的结果。

printf("String : %s \n", msgrcv);
%s格式说明符期望一个指向以nul结尾的字符数组(C字符串)的指针。您传递了std::string(假设某个地方有讨厌的using namespace std;)。

要将数据类型与格式说明符匹配,请使用std::string::c_str:
printf("String : %s \n", msgrcv.c_str());

07-24 09:46
查看更多