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);从标准输入读取少于 32 个字符,则换行符将出现在末尾,并将通过套接字发送。从中读取的任何内容fgets(m.n, 32, stdin);都不会匹配“111”,因为它的长度为 3 并且不以换行符结尾。

解决方案:在您执行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 回答