我已经使用了这个约2天了。我被困了,有一个相当简单的烦恼,但我无法解决它。
我的程序基本上从PHP脚本接收TCP连接。发送的消息存储在char buffer[1024];
中。
好的,这个缓冲区变量包含一个唯一键,与一个char key[1024] = "supersecretkey123";
问题本身就是这两者不相等 - 无论我做什么。 我一直在将缓冲区和键变量打印在彼此之上,看起来它们是100%相同的。但是我的均衡测试仍然失败。
if(key == buffer) { // do some thing here etc }
然后我开始在互联网上搜索可能出错的一些信息。我后来意识到这可能是一些令我讨厌的逃脱角色。但我无法打印它们,删除它们甚至确保它们在那里。所以这就是为什么我被困 - 当缓冲变量与关键变量匹配时,如何使这些相等的想法。 除非手动修改密钥的声明,否则密钥不可能。程序本身正在接收信息并“正确”发回信息。
感谢。
答案 0 :(得分:5)
如果您使用的是空终止字符串,请使用正确的api - strcmp
及其变体。
此外,不需要声明char key[1024] = "supersecretkey123";
中的大小 - 编译器将减少它或堆栈/堆内存将被浪费。
答案 1 :(得分:1)
尝试使用if(!strncmp(key,buffer,1024))
。请参阅strncmp
上的this reference。
答案 2 :(得分:1)
如果您使用的是C ++,请使用std::string
代替char []
。您无法比较两个char []
的尝试方式(它们是指向内存的指针),但可以使用std::string
。
如果在您的情况下以某种方式强制使用char[]
,请使用strcmp
。