c ++模式匹配popen()输出与strcmp()

时间:2014-10-31 16:15:35

标签: c++ popen strcmp

我从使用popen()运行的脚本的缓冲区中输入数据,我需要在写入文件之前进行字符串比较(我理解strcmp是最好的)。

这是我到目前为止所拥有的

#include <stdio.h>
#include <string.h>
#include <iostream>

int main()
{

        char key[] = "Order ID:";
        char buff[BUFSIZ];
        FILE *fp = popen("scriptfile.sh", "r");
        while (fgets( buff, BUFSIZ, fp)){
                if (!strcmp (key, buff)){
                        std::cout << "Match";
                }else{
                        printf("LS->%s", buff);
                        std::cout << "Good Bye Cruel World!";
                }
        }
        pclose(fp);
}

没有错误,此处bpaste是正在运行的数据的转储。请参阅“订单ID”的最后一行

2 个答案:

答案 0 :(得分:2)

if / else语句与你认为它正在做的相反,因为strcmp()在匹配时输出0,所以只需放置一个“!” if语句中的运算符。

if (!strcmp (key, buff))
    std::cout << ".";

如果您想更详细地解释原因,请转到here

答案 1 :(得分:0)

strcmp()检查完全相等。由于您正在寻找key:value,因此您无法使用strcmp检查新字符串是否以key开头......自strcmp以来将失败(除非value恰好为空)。

所以而不是:

if (strcmp(key, buff)) {

做的:

if (strstr(key, buff) == buff) {

这将在key中查找子串buff并返回它开始的指针,您希望buff

或者,因为你知道它必须从头开始:

if (!memcmp(key, buff, sizeof(key) - 1)) {

那只会检查内存中的字节数。由于您不想检查- 1的空字节,因此最后需要key