[英]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()匹配時,strcmp()會輸出0,因此只需放置“!” if語句中的運算符。
if (!strcmp (key, buff))
std::cout << ".";
如果您想對此進行更詳細的說明,請轉到此處 。
strcmp()
檢查是否完全相等。 由於您正在尋找key:value
,因此您無法使用strcmp
來檢查新字符串是否以key
...開頭,因為strcmp
將會失敗(除非value
恰好為null)。
所以代替:
if (strcmp(key, buff)) {
做:
if (strstr(key, buff) == buff) {
這將在buff
尋找子字符串key
,並返回它開始的指針,您希望將其作為buff
。
或者,由於您知道它必須從頭開始:
if (!memcmp(key, buff, sizeof(key) - 1)) {
那只會檢查內存中的字節。 你所需要的- 1
處結束,因為你不想要檢查的空字節key
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.