2014-11-15 6 views
0

У меня есть программа upchucks тайна 'y' в ее выходе, и она кажется связанной с строкой. Что делает код, он захватывает данные буфера из сценария php и «будет» вставлять его в массив. Но эта тайна «я» появилась. Мой код делает то, что предполагается, минус тайна «y».C++ mystery character after string in fgets

выход:

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++ захватывает (минус 'у'):

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

Я не вижу этого, но я замечаю, что символы 'y' не являются единственными начальными символами, которые отображаются только в плохом выходе. В строках даты есть цифры. – brycem

+1

'sizeof (buff)/sizeof (BUFSIZ)', вероятно, не то, что вы хотите. –

+0

должен быть просто 'sizeof buff' для аргумента' fgets', тогда 'cout << buff;' - терминатор NUL будет обеспечивать нужный объем вывода, тогда как с вашим текущим кодом вы предполагаете, что весь буфер был прочитан в ... –

ответ

0

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

+0

Вы можете предоставить фрагмент рабочего кода? – brad

+0

Что? Из 'cout << buff;' или of for for (int i = 0; buff [i]! = '\ 0'; ++ i) '? –

+0

выглядит хуже :(https://bpaste.net/show/6309d794d001 – brad