2014-11-14 3 views
0

У меня есть входящие данные буфера из сценария, для которого мне нужен ключ => 'значение', чтобы я мог запустить математическое уравнение против него (да, я знаю, мне нужно преобразовать в int) , Поскольку я уверен, что данные являются строками, я пытаюсь запустить шаблонный шаблон против него. Я вижу входящие данные, но я никогда не получаю положительного совпадения.C++ string pattern matching buffer data

код: выход

int getmyData() 
{ 

     char key[] = "total"; 
     char buff[BUFSIZ]; 
     FILE *fp = popen("php getMyorders.php 155", "r"); 
     while (fgets(buff, BUFSIZ, fp)){ 
       printf("%s", buff); 
       //if (strstr(key, buff) == buff) { 
       if (!memcmp(key, buff, sizeof(key) - 1)) { 
         std::cout << "Match "<< std::endl; 
       } 

     } 
} 

данные print_f():

array(2) { 
    ["success"]=> 
    string(1) "1" 
    ["return"]=> 
    array(3) { 
    [0]=> 
    array(7) { 
     ["orderid"]=> 
     string(9) "198397652" 
     ["created"]=> 
     string(19) "2014-11-14 15:10:10" 
     ["ordertype"]=> 
     string(3) "Buy" 
     ["price"]=> 
     string(10) "0.00517290" 
     ["quantity"]=> 
     string(10) "0.00100000" 
     ["orig_quantity"]=> 
     string(10) "0.00100000" 
     ["total"]=> 
     string(10) "0.00000517" 
    } 
    [1]=> 
    array(7) { 
     ["orderid"]=> 
     string(9) "198397685" 
     ["created"]=> 
     string(19) "2014-11-14 15:10:13" 
     ["ordertype"]=> 
     string(3) "Buy" 
     ["price"]=> 
     string(10) "0.00517290" 
     ["quantity"]=> 
     string(10) "0.00100000" 
     ["orig_quantity"]=> 
     string(10) "0.00100000" 
     ["total"]=> 
     string(10) "0.00000517" 
    } 
    [2]=> 
    array(7) { 
     ["orderid"]=> 
     string(9) "198398295" 
     ["created"]=> 
     string(19) "2014-11-14 15:11:14" 
     ["ordertype"]=> 
     string(3) "Buy" 
     ["price"]=> 
     string(10) "0.00517290" 
     ["quantity"]=> 
     string(10) "0.00100000" 
     ["orig_quantity"]=> 
     string(10) "0.00100000" 
     ["total"]=> 
     string(10) "0.00000517" 
    } 
    } 
} 

Как добраться до [ "общего"] и добавить # 3 к нему? [ "Всего"] + 3?

+0

Не могли бы вы подробнее остановиться на ВАЗе t это '[" total "] + 3' означает. – sln

ответ

0

Вы сопоставляете только первые 5 байтов buff для "total", вместо фактического поиска. Если буфер не содержит каких-либо аннулирует, функция, которую вы хотите использовать strstr:

while (fgets(buff, BUFSIZ, fp)) { 
    const char* total = strstr(buff, key); 
    if (total) { 
     // found our total, which should point 
     // ["total"] => 
     // ^
     // here 
    } 
} 

Если буфер может содержать неопределенные значения, то вам необходимо написать функцию, которая будет называться memstr, что довольно просто: попробуйте найти его в каждой точке:

const char* memstr(const char* str, size_t str_size, 
        const char* target, size_t target_size) { 

    for (size_t i = 0; i != str_size - target_size; ++i) { 
     if (!memcmp(str + i, target, target_size)) { 
      return str + i; 
     } 
    } 

    return NULL; 
} 

использование которых в вашем случае будет:

const char* total = memstr(buff, BUFSIZ, key, sizeof(key) - 1);