2017-07-17 74 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'; 
相關問題