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似乎不知怎么解决了他的问题。我在猜测,因为唯一正确发布的代码是有效的代码。