У меня есть входящие данные буфера из скрипта, для которого мне нужно ключ => ‘значение’, чтобы я мог выполнить математическое уравнение для него (да, я знаю, что мне нужно преобразовать в 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"}
}
}
Как мне добраться до [«итого»] и добавить к нему №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);