【问题标题】:comparing char buffer to string not working将字符缓冲区与字符串进行比较不起作用
【发布时间】:2021-03-30 16:05:06
【问题描述】:

在 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"))

它们都不起作用

【问题讨论】:

标签: c++ string char compare


【解决方案1】:

您可以直接使用std::string,而不是将数据读入char[],然后将该数据复制到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.

【讨论】:

  • 非常感谢我是 C++ 中字符串和字符的新手,这对我有很大帮助
  • @DavidTheTech 很高兴听到这个消息!不客气!
【解决方案2】:

您正在创建复制 sizeof(buffer) 字符的字符串,而它只包含 dwRead 的初始化字符。

然后你比较两个指针而不是字符串内容(这仍然不起作用,因为cmd 的长度错误)。您实际上应该使用 strcmp 进行比较,而不创建临时的 std::string 对象。

if (0 == ::std::strcmp(buffer, "help"))
{
    printf("hello");
}

【讨论】:

    【解决方案3】:

    你应该这样做

    cmd.resize(dwRead);
    

    这会将字符串设置为实际读取数据的长度,而不是整个缓冲区。一个 c++ std::string 可以包含任何数据,包括0-bytes

    或者你必须打电话

    string cmd = bufferToString(buffer, dwRead);
    

    应该有同样的效果(没看到bufferToString的实现)。

    你的比较也是错误的。在 c++ 中你会这样做

    if (cmd == "help")
    

    【讨论】:

      【解决方案4】:

      这应该可行:

      if (cmd == string("help")) // should work
      {
          printf("hello");
      }
      

      代码:

      if (cmd.c_str() == "help") 
      

      将比较指针(#1 从 cmd.c_str() 返回,#2 - 指向“帮助”的常量指针),这不太正确

      【讨论】:

        猜你喜欢
        • 2016-03-14
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        • 2013-07-10
        相关资源
        最近更新 更多