fgets中字符串之后的c ++神秘字符

时间:2014-11-15 04:31:08

标签: php c++ arrays fgets

我有一个程序在输出中抬起一个神秘的'y',它看起来与字符串相关。 代码的作用是,它从php脚本中捕获缓冲区数据,然后将“插入”数组。但这个神秘的'y'出现了。 我的代码做了它应该做的事情,减去了神秘的'y'。

输出:

198397652
22014-11-14 15:10:10
Buy
y0.00517290  <- that 'y'
0.00100000
0.00100000
0.00000517
198397685
52014-11-14 15:10:13
Buy
y0.00517290   <- again
0.00100000
0.00100000
0.00000517
198398295
52014-11-14 15:11:14
Buy
y0.00517290  <- another one
0.00100000
0.00100000
0.00000517

代码:

char getmyData()
{
        char buff[BUFSIZ];
        FILE *fp = popen("php getMyorders.php 155", "r");
        if (fp == NULL) perror ("Error opening file");
        while(fgets(buff,sizeof(BUFSIZ),fp)){
                for (int i = 0; i < sizeof(buff) / sizeof(BUFSIZ); ++i) {
                        std::cout << buff[i];
                }
        }
}

脚本:

$result = api_query("myorders", array("marketid" => $id));
foreach( $result['return'] as $x) {
        if(is_array($x)) {
                foreach($x as $y) {
                        echo $y . "\n";
                }
        } else {
                echo $x . "\n";
        }
}

c ++捕获的脚本输出(减去'y'):

198397652
2014-11-14 15:10:10
Buy
0.00517290
0.00100000
0.00100000
0.00000517
198397685
2014-11-14 15:10:13
Buy
0.00517290
0.00100000
0.00100000
0.00000517
198398295
2014-11-14 15:11:14
Buy
0.00517290
0.00100000
0.00100000
0.00000517

如何摆脱'y'? 我的错误是什么?

1 个答案:

答案 0 :(得分:0)

buff保证正确地以null结尾,因此只要将正确的size参数传递给fgets(),就可以直接输出。如果你坚持逐字逐句,那么只需循环buff中的元素不等于NUL,即buff[i] != '\0'