如何解决将字符缓冲区与字符串进行比较不起作用
在 if 语句中尝试将 char 缓冲区与 std 字符串进行比较时,它无法按预期工作 这是代码
if (ConnectNamedPipe(hPipe,NULL) != FALSE) // wait for someone to connect to the pipe
{
while (ReadFile(hPipe,buffer,sizeof(buffer) - 1,&dwRead,NULL) != FALSE)
{
/* add terminating zero */
buffer[dwRead] = 0x00;
/* do something with data in buffer */
printf("%s\n",buffer);
string cmd = bufferToString(buffer,sizeof(buffer));
printf("%s",cmd.c_str());
if (cmd.c_str() == "help") //HERE is the issue
{
printf("hello");
}
}
}
比较时不起作用 我试过使用不同类型的 char buffer[1024] 到字符串的转换,但没有得到任何地方
编辑: 到目前为止我已经尝试过
cmd.resize(dwRead);
if (cmd == string("help"))
和
if (0 == ::std::strcmp(buffer,"help"))
它们都不起作用
解决方法
您可以直接使用 char[]
,而不是将数据读入 std::string
,然后将该数据复制到 std::string
。
积木:
std::string cmd;
cmd.resize(wanted_buffer_size); // Set the proper buffer size
ReadFile(hPipe,cmd.data(),cmd.size(),&dwRead,nullptr); // Read directly into cmd
cmd.resize(dwRead); // Shrink down to dwRead afterwards. Automatically null terminated.
,
您正在创建复制 sizeof(buffer)
个字符的字符串,而它只包含 dwRead
个初始化字符。
然后您比较两个指针而不是字符串内容(这仍然不起作用,因为 cmd
的长度错误)。您实际上应该在不创建临时 strcmp
对象的情况下使用 std::string
进行比较。
if (0 == ::std::strcmp(buffer,"help"))
{
printf("hello");
}
,
你应该这样做
cmd.resize(dwRead);
这会将字符串设置为实际读取数据的长度,而不是整个缓冲区。 C++ std::string
可以包含任何数据,包括 0-bytes
。
或者你必须打电话
string cmd = bufferToString(buffer,dwRead);
应该具有相同的效果(没有看到 bufferToString
的实现)。
你的比较也是错误的。在 C++ 中你会做
if (cmd == "help")
,
这应该有效:
if (cmd == string("help")) // should work
{
printf("hello");
}
代码:
if (cmd.c_str() == "help")
将比较指针(#1 从 cmd.c_str() 返回,#2 - 指向“帮助”的常量指针),这不太正确
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。