У меня есть входящие данные буфера из сценария, который мне нужен ключ => 'значение', чтобы я мог запустить математическое уравнение против него (да, я знаю, мне нужно преобразовать в 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?
Вы сопоставляете только первые 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);
["total"]+3
.