данные буфера соответствия строкового шаблона c ++

0

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

код:

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"
    }
  }   
}

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

  • 0
    Не могли бы вы пояснить, что означает эта ["total"]+3 .
Теги:
memcmp
strstr

1 ответ

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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню