簡體   English   中英

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()匹配時,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM