我从使用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”的最后一行
答案 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
。