我知道关于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());