c ++ загадочный символ после строки в fgets

0

У меня есть программа upchucks тайна "y" в ее выходе, и она кажется связанной с строкой. Что делает код, он захватывает данные буфера из сценария php и "будет" вставлять его в массив. Но эта тайна "я" появилась. Мой код делает то, что предполагается, минус тайна "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"? Какая у меня ошибка?

  • 0
    Я этого не вижу, но замечаю, что символы «у» - не единственные начальные символы, которые отображаются только в неправильном выводе. К строкам даты добавляются цифры.
  • 1
    sizeof(buff) / sizeof(BUFSIZ) , вероятно, не то, что вы хотите.
Показать ещё 3 комментария
Теги:
arrays
fgets

1 ответ

0
Лучший ответ

buff гарантированно корректно завершается нулем, поэтому он может выводиться напрямую, если аргумент правильного size передается в fgets(). Если вы настаиваете на движении символа по символу, тогда просто цикл, пока элемент в buff не равен NUL, то есть buff[i] != '\0'.

  • 0
    Можете ли вы предоставить рабочий фрагмент кода?
  • 0
    Которого? cout << buff; или for (int i = 0; buff[i] != '\0'; ++i) ?
Показать ещё 3 комментария

Ещё вопросы

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