2017-07-17 71 views
2

我知道有很多关于char数组字符串转换的信息和线程,但是我尝试了很多“解决方案”,但没有取得任何成功。我试过这个solution这是最接近我的问题,但也没有工作。char数组上的奇怪字符到字符串转换

我有以下代码:

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

@joe请添加您的输出。 –

+0

在这种情况下 - >'printf'不能处理C++字符串。 – Ron

+0

它是C++,我有“使用命名空间标准;”在代码的顶部,代码编译和工作。 – joe

回答

3

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

printf("String : %s \n", msgrcv); 

%s格式说明需要一个指向一个NUL终止字符数组(C-字符串)。你通过一个std::string(假设一个讨厌的using namespace std;某处)。

要数据类型匹配到格式说明,使用std::string::c_str

printf("String : %s \n", msgrcv.c_str()); 
1

printf的格式说明%s要求参数必须是一个指针(char*)到一个空终止字符数组。您没有通过char*,而是string

如果string恰好是std::string,那么你就可以得到一个指向使用c_str成员函数的空值终止字符串。或者你可以使用流:

std::cout << "String : " << msgrcv << '\n'; 
相关问题