我知道有很多关于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
我缺少或错误的任何想法?
答案 0 :(得分:3)
您正在打印的奇怪字符是未定义行为的结果。
printf("String : %s \n", msgrcv);
%s
格式说明符需要指向nul终止字符数组(C-string)的指针。你传递std::string
(假设某处有一个令人讨厌的using namespace std;
。)
要将数据类型与格式说明符匹配,请使用std::string::c_str
:
printf("String : %s \n", msgrcv.c_str());
答案 1 :(得分:1)
printf
格式说明符%s
要求参数必须是指向以null结尾的字符数组的指针(char*
)。您没有传递char*
,而是传递string
。
如果string
恰好是std::string
,那么您可以使用c_str
成员函数获取指向空终止字符串的指针。或者您可以使用流:
std::cout << "String : " << msgrcv << '\n';