C-print中的字符串与strcmp所说的相同
大家好,我的服务器客户端项目有问题。我使用命令C-print中的字符串与strcmp所说的相同,c,strtok,strcmp,C,Strtok,Strcmp,大家好,我的服务器客户端项目有问题。我使用命令/server www.google.com运行代理服务器,因此我有argv[1]=www.google.com。在此之后,我运行我的客户机,并向服务器发送值GET www.google.com。现在,在服务器端,我使用了strtok\r(buffer,“,&string1),所以我有buffer=GET和string1=www.google.com(我确定这些值是因为我打印它们)。问题是当我使用 if((strcmp(string1,argv[1]
/server www.google.com
运行代理服务器,因此我有argv[1]=www.google.com
。在此之后,我运行我的客户机,并向服务器发送值GET www.google.com
。现在,在服务器端,我使用了strtok\r(buffer,“,&string1)
,所以我有buffer=GET
和string1=www.google.com
(我确定这些值是因为我打印它们)。问题是当我使用
if((strcmp(string1,argv[1]) == 0))
{
printf(" SAME VALUES \n");
}
我没有得到printf,所以这两个变量没有相同的值。有什么想法吗?在strotk\u r(缓冲区,“,&string1)
中,string1
不是找到的标记的指针。您似乎正在比较string1
,但函数返回值是令牌指针。所以代码应该是
char * tok = strtok_r(buffer," ",&string1);
if ((strcmp (tok,argv[1]) == 0))
{
printf(" SAME VALUES \n");
}
检查原始数据(使用十六进制打印、调试器等)。可能还有一些前导/尾随空格或换行符。最有可能的是string1在末尾有空格。考虑修剪它,或者编写一个自定义的比较函数,它也在NeXLIN上停止。Strug1和Agv[1 ]的打印值按字节显示,并检查不同的代码,显示一些代码来复制这个问题。添加<代码> PrimTf(Strug1= [[%S]),ARG 1=[[%S] \n ],Strug1,Agv[1 ]);<代码>在比较之前。方括号用于分隔字符串。如果右方括号在行首附近,应怀疑字符串中有CR
'\r'
字符。如果它们在下一行,则假定字符串中有LF'\n'
个字符。这是正确的。我建议你把你的答案扩大一点。也许可以添加如下内容:char*p代码>char*tok代码>tok=strtok_r(缓冲区“,&p)代码>..@Brad S.谢谢,但OP似乎不知怎么解决了他的问题。我在猜测,因为唯一正确发布的代码是有效的代码。