Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;模式匹配popen()输出与strcmp()匹配_C++_Popen_Strcmp - Fatal编程技术网

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

C++ c++;模式匹配popen()输出与strcmp()匹配,c++,popen,strcmp,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("s

我使用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);
}
#包括
#包括
#包括
int main()
{
字符键[]=“订单ID:”;
字符buff[BUFSIZ];
FILE*fp=popen(“scriptfile.sh”、“r”);
while(fgets(buff、BUFSIZ、fp)){
如果(!strcmp(键,buff)){

std::coutif/else语句的作用与您认为的相反,因为strcmp()在匹配时输出0,所以只需在if语句中放置“!”运算符

if (!strcmp (key, buff))
    std::cout << ".";
if(!strcmp(键,buff))
std::cout
strcmp()
检查是否完全相等。由于您正在查找
key:value
,因此无法使用
strcmp
检查新字符串是否以
key
开头……因为
strcmp
将失败(除非
value
恰好为空)

因此,不是:

if (strcmp(key, buff)) {
做:

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

或者,由于您知道必须从一开始就开始:

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

这将只检查内存中的字节。由于您不想检查
键的空字节,因此结尾需要
-1

是否确实要匹配完整的读取字符串(包括换行符!)与该键相对,该键看起来只像一行的第一部分?我想我在\n上也出错了。仍然没有模式匹配。所有的“再见残酷世界”和“无句点”。“我知道0表示布尔是/肯定。你能详细说明你的答案吗,可能是一个代码片段吗?是的,我实际上正在尝试从入站执行键:值查询。”JSON@user3766148重新错误:ISO C++禁止指针和整数的比较?我应该在编译时转换成DECI吗?如果IF(MycMP(key,buff,sieof(key)-1)){我不会出错,但我也没有得到一个正匹配。PHPMODE1.1.CPP:12:29:错误:ISO C++禁止指针和整数的比较[-fPrime]是的,它是经过验证的数据
if (!memcmp(key, buff, sizeof(key) - 1)) {