fwrite错误地输出字符串

时间:2013-09-17 21:07:49

标签: c++ linux gcc fwrite fread

我目前正在编写一个C ++程序来控制某些LED,方法是通过termios将字符串发送到Arduino。每一行都以换行符结束。我已经编写了一个输出到终端的测试程序,但是以下代码片段的输出存在问题:

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

对我来说是正确的。您可能想跳过换行符,但fread()不会为您执行此操作。如果您希望FILE操作读取行,则使用fgets()而不是fread()