我有来自脚本的入站缓冲区数据,我需要key => '值',以便我可以运行一个数学方程式(是的,我知道我需要转换为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 :(得分:0)
您只匹配buff
"total"
的前5个字节,而不是实际搜索。如果缓冲区不包含任何空值,则要使用的函数为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);