2011-02-05 10 views
0

メッセージを送信するときに問題が発生します。スペースは個々のメッセージに分割されます。メッセージはsprintf(message, "PRIVMSG %s :%s\n", irc_chan, buffer);を使用して構成されます。エラーは次のように表示されます(個々のメッセージは""に含まれています)。私は"Hi there"というメッセージを入力します。それは"Hi""there"を出力します。バッファはchar[1024]です。どんなアイデアも教えてください。IRCクライアントが不適切にメッセージを送信しています。

以下は、メッセージを送信するコードの一部です。ソケットに使用したクラスは問題ではなく、メッセージを受信して​​FINEに接続できます。

scanf("%s", buffer); 
sprintf(message, "PRIVMSG %s :%s", irc_chan, buffer); 
send(IRCSocket.iSocket, message, strlen(message), 0); 

EDIT:Computer Guruの助けを借りてこれを解決しました。 scanf()を使用していましたが、cin.getline()を使用していたはずです。助けてくれてありがとう、非常に感謝しています。

+0

入力をどのようにキャプチャしていますか? – RageD

+0

Stdin、scanf( "%s"、バッファ); scanf( "%s"、&buffer);違いはありません。 – Cr15py

+0

この文脈で「それ」と「彼ら」とは何ですか? – nos

答えて

3

%sにはスペースは含まれません。各単語は個別にキャプチャされます。

+0

ああ...ありがとう、私はこれに感謝します。私はそれを知らなかったことに恥ずかしいです。私にこれを警告してくれてありがとう。大変感謝しています。 – Cr15py

+0

問題ありません。最後に到達するまで、一度に1文字を得るためにfgetをループしたり、getline()などの行単位の関数を使用することができます。 –

0

はここscanf(3)マニュアルページからです:

s Matches a sequence of non-white-space characters; the next pointer must be a pointer to char, and the array must be large enough to accept all the sequence and the terminating NUL character. The input string stops at white space or at the maximum field width, whichever occurs first.

それはそのようにバッファの終わりをオーバーランしても、あまりにも簡単です。代わりにfgets(3)を使用してください。 C++では(あなたのタグなので)std::stringgetline()を使うことができます。

関連する問題