0

ソケット tcp で 2 つの文字列を検証しようとしていますが、何が間違っているのかわからないため、strcmp を使用して比較しようとしている文字列は次のとおりです。

ヘッダ:

struct message{
    char n[32];
    int flag;
};

サーバー内:

char names[3][32];
strcpy(passs[0], "111");

int z;
printf("checking data\n");
for(z=0 ; z<3; z++){
    if (strcmp(&m.n, names[z]) == 0){
        printf("name found\n");
    }
}

クライアントで:

struct message m;
fgets(m.n, 32, stdin);
send(cSock, &m, sizeof(m),0);

ps: プログラムはスレッドを使用したクライアント/サーバー tcp の例であるため、重要なコードラインのみを提供しようとしました。

4

2 に答える 2

2

fgets(m.n, 32, stdin);stdin からの読み取りが 32 文字未満の場合、改行が最後に存在し、ソケットを介して送信されます。"111" は長さ 3 であり、改行で終わっていないため、読み取ったものfgets(m.n, 32, stdin);は "111" と一致しません。

解決策: を実行した後、改行を切り捨てますfgets

于 2013-02-24T19:29:06.013 に答える
0

:のすべての要素を初期化する必要があります。初期化char names[3][32]しない場合、それらからの読み取りは未定義動作であり、何かが発生する可能性があります。

for (i = 0; i < 3; i++)
    names[i][0] = 0;  // Initialize to the empty string
于 2013-02-24T19:12:46.980 に答える