c++模式将popen()输出与strcmp()匹配
c++ pattern matching popen() output with 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"的最后一行
if/else语句所做的与您认为的相反,因为strcmp()在匹配时输出0,所以只需在if语句中放置一个"!"运算符即可。
if (!strcmp (key, buff))
std::cout << ".";
如果你想更详细地解释为什么会这样,请点击此处。
strcmp()
检查是否完全相等。由于您正在查找key:value
,因此无法使用strcmp
检查新字符串是否以key
开头。。。因为CCD_ 5将失败(除非CCD_。
所以不是:
if (strcmp(key, buff)) {
do:
if (strstr(key, buff) == buff) {
这将在buff
中查找子字符串key
,并返回它开始的指针,您希望它是buff
。
或者,既然你知道它必须从一开始:
if (!memcmp(key, buff, sizeof(key) - 1)) {
这只会检查内存中的字节。您需要在末尾使用- 1
,因为您不想检查key
的空字节。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 基于ELO的团队匹配算法
- 没有用于初始化C++中的变量模板的匹配构造函数
- 调用'begin(int [n])'没有匹配函数
- 将模板与类模板扣除占位符参数匹配
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 在使用累加时,C++中的运算符+不匹配
- 错误:调用'getline'没有匹配函数
- C++ 与操作员不匹配<<
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- 使用 strcmp() 比较 c 样式字符数组时不匹配
- 输出与 c 中的 strcmp() 函数不匹配
- Strcmp 用户输入和文件输入不匹配
- 调用 strcmp 没有匹配函数
- c++模式将popen()输出与strcmp()匹配