最近在写一个功能,就是客户端查询英文单词的解释,例如:yarn n. fibres that have been spun for knitting, weaving, etc 客户端输入单词然后发送给服务器,服务器把解释提取出来发送回客户端:具体代码如下:
服务器:
if((fp = fopen("/home/lzhh/MYSELFE/applet/dictionary/dict.txt", "r")) == NULL)
{
printf("open dict.txt failed\n");
exit(-1);
}
while(fgets(line, sizeof(line), fp) != NULL)
{
if(line[strlen(line) - 1] == '\n')
line[strlen(line) - 1] = '\0';
sscanf(line, "%[^ ]", ssca);
if((strcmp(ssca, msg.data)) == 0)
{
sscanf(line, "%*[^ ]%*[ ]%[^\n]", msg.data);
send(connectfd, &msg, sizeof(msg), 0);
fseek(fp, 0, SEEK_SET);
fclose(fp);
break;
}
sprintf(msg.data, "The contents of your query do not exist");
send(connectfd, &msg, sizeof(msg), 0);
}
客户端:
printf("input word : ");
scanf("%s", msg.data);
printf("*******************a\n");
//输入#退出
if(strcmp(msg.data, "#") == 0)
{
break;
}
send(sockfd, &msg, sizeof(MSG), 0);
recv(sockfd, &msg, sizeof(MSG), 0);
printf("******%s\n", msg.data);
如果不加那两段红色的代码,客户端只要输入单词正确,随便查都能得到正确的解释。
但是加上红色代码,客户端再查询,得到的结果很乱,有的是以前查询单词的解释,有的是正确解释,有的提示用户单词不存在的信息。就好像是客户端返回的是上次查询msg.data保存的结果(解释的信息保存在msg.data中)。
这是为什么啊大神们,sprintf, send函数应该没啥影响啊 为什么加上他们就会出现错误呢?
|