在qt程序中strstr的奇怪行为

时间:2014-03-19 15:23:39

标签: c++ qt strstr

我是初学者,制作了一个从lineedit获取输入的函数将其转换为数组,然后搜索它以查找单词。如果找到该单词,则会在标签中打印成功,否则会打印错误。问题是无论我输入什么,每次打印错误都是如此。 我做错了什么。

void MainWindow::on_consoleEdit_returnPressed()
{
    QString text = ui->consoleEdit->text();

    char enteredCmd[4096];
    strcpy(enteredCmd, "Some string data");
    text = enteredCmd;
    //enteredCmd contains all the data that text string contains
    char *open = strstr(enteredCmd, "open");

    if(open != NULL) {
        ui->answerLabel->setText("SUCCESS");
    }
    else {
        ui->answerLabel->setText("ERROR");
    }
}

3 个答案:

答案 0 :(得分:1)

您每次都在测试相同的字符串,请参阅:

char enteredCmd[4096];
strcpy(enteredCmd, "Some string data");
text = enteredCmd;

这将使用此“Some string data”字符串的副本覆盖text值。

无论如何,你让这变得复杂了。 QString有许多对您有用的功能。

void MainWindow::on_consoleEdit_returnPressed()
{
    QString text = ui->consoleEdit->text();

    if(text.contains("open")) {
        ui->answerLabel->setText("SUCCESS");
    } else {
        ui->answerLabel->setText("ERROR");
    }
}

答案 1 :(得分:0)

您的代码搜索行编辑中的文字。您的代码实际上是在字符串enteredCmd上搜索“open”,它始终包含“Some string data”。因此,您应该始终在答案标签上打印“错误”。

以下是我认为你要做的事情,使用QString代替strstr

void MainWindow::on_consoleEdit_returnPressed()
{
    QString text = ui->consoleEdit->text();

    if(text.contains(QStringLiteral("open"))) {
        ui->answerLabel->setText("SUCCESS");
    }
    else {
        ui->answerLabel->setText("ERROR");
    }
}

答案 2 :(得分:0)

QString旨在使用多种语言,因此需要进行一些转换才能将文本转换为C样式的8位字符串。您可以尝试这样的事情:

char *myChar = text.toLatin1().data();