2017-07-17 13 views
2

文字列変換に関する文字配列について多くの情報とスレッドがあることは知っていますが、私はこれを試しました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

@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が発生した場合は、c_strメンバ関数を使用して、NULL終了文字列へのポインタを取得できます。ストリームを使用することもできます。

std::cout << "String : " << msgrcv << '\n'; 
関連する問題