2013-09-17 3 views
0

В настоящее время я пишу программу на C++ для управления некоторыми светодиодами путем отправки строк через терминалы в Arduino. Каждая строка заканчивается символом новой строки. Я написал тестовую программу, которая будет выводить на терминал, но есть проблемы с выходом в следующем фрагменте кода:fwrite выводит строку символов неверно

char* ledAddr = (char*)malloc(3); 
char* rVal = (char*)malloc(3); 
char* gVal = (char*)malloc(3); 
char* bVal = (char*)malloc(3); 
... 
fread(ledAddr, 3, 1, stdin); 
fread(rVal, 3, 1, stdin); 
fread(gVal, 3, 1, stdin); 
fread(bVal, 3, 1, stdin); 
... 
char* outputString = malloc(17); 

outputString[0] = 't'; 
strncpy(outputString+1, rVal, 3); 
outputString[4] = ','; 
strncpy(outputString+5, gVal, 3); 
outputString[8] = ','; 
strncpy(outputString+9, bVal, 3); 
outputString[12] = ','; 
strncpy(outputString+13, ledAddr, 3); 
outputString[16] = '\n' 

fwrite(outputString, 17, 1, stdout); 

Это мой тестовый вход:

180 
255 
0 
0 

Это мой ожидается выход:

t255,0,0,180 

И это то, что я ветер с:

t 
25,5 
0,0, 
184 

Любая помощь будет оценена по достоинству.

ответ

2

Выглядит правильно. Вы, вероятно, хотели пропустить новые строки, но fread() не сделают этого для вас. Если вам нужны операции FILE для чтения строк, вы должны использовать fgets(), а не fread().

+0

Вы правы, я забыл учитывать, что 'fread()' не пропускает символы новой строки. Теперь он работает правильно. – MSalmo

Смежные вопросы