У меня есть программа 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'? Какая у меня ошибка?
Я не вижу этого, но я замечаю, что символы 'y' не являются единственными начальными символами, которые отображаются только в плохом выходе. В строках даты есть цифры. – brycem
'sizeof (buff)/sizeof (BUFSIZ)', вероятно, не то, что вы хотите. –
должен быть просто 'sizeof buff' для аргумента' fgets', тогда 'cout << buff;' - терминатор NUL будет обеспечивать нужный объем вывода, тогда как с вашим текущим кодом вы предполагаете, что весь буфер был прочитан в ... –