C++ c++;模式匹配popen()输出与strcmp()匹配
我使用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
#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::coutstrcmp()
检查是否完全相等。由于您正在查找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)) {