私はCでソケットネットワーキングを行っています。サーバでの検証のためにクライアント側からパスワードを受け取るアプリケーションです。私はすべてを設定してソケットが通信しますが、文字列を送信してstrcmp()を使用すると、文字列が同じになるにもかかわらず、0が返されません(私は文字列が同じであると信じています)。 so:C - ソケットネットワーキング - 文字列の等価性が得られない
クライアントとサーバー側は別々のプログラムであり、マシン上ではlocalhostを経由していることに注意してください。
/*Client Side */
char password[64] = {0};
fgets(password, 64, stdin);
write(sockfd, password, 64);
/*Server Side */
char password[64] = "password";
char password_buffer[64];
read(newsockfd, password_buffer, 64);
if(strcmp(password, password_buffer) != 0)
{
printf("Password Incorrect\n");
{
else
{
printf("Password correct\n");
}
ご協力いただければ幸いです。 bzeroやmemsetの使用が関与している可能性がありますが、これらがどのように関与しているかはわかりません。
あなたは 'read'の戻り値を無視するので、読み込んだバイト数は分かりません。どのように 'strcmp'がそれを知ることを期待していますか? –
'read'は64バイト未満を読み取ることがあります。それは読み込まれたバイト数を返します。それが64ではない場合は、残りの文字と一緒に繰り返す必要があります – fukanchik
おそらく文字列終了の問題。 'password_buffer'のメモリを' read'の後で調べます。そして、私は0にもそれを初期化し、最後のものが '\ 0'であることを保証するために63バイトしか読みません。 – yano