char数组到字符串转换的奇怪字符

时间:2017-07-17 11:12:06

标签: c++ arrays string

我知道有很多关于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

我缺少或错误的任何想法?

2 个答案:

答案 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';