如何使用read在数组中正确存储字符?

时间:2012-07-12 20:11:59

标签: c arrays string char buffer

我编写了以下代码,我不明白为什么读取不按照我期望的方式存储字符:

char temp;
char buf[256];

    while(something)   
        read (in,&temp, 1);
        buf[strlen(buf)] = temp;
     }

如果我在阅读时打印tempbuf数组的最后一个位置,有时它们不匹配。例如,字符可能是“d”,但数组包含%或字符为0,数组包含.

我阅读的字符少于256个,但这并不重要,因为我在阅读时正在打印。

我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

是的,您尚未初始化buf - strlen(buf)未定义。你应该这样初始化它:

buf[0] = 0;

此外,最好跟踪长度,而不是每次迭代调用strlen以避免Shlemiel the painter algorithm

你也应该检查read(2)调用中的错误 - 如果它返回-1或0,你应该突破你的循环,因为这意味着发生错误或你到达结束时文件/输入流。

答案 1 :(得分:1)

请勿在此代码中使用strlenstrlen依赖于它的参数是NULL终止的C字符串。因此,除非您将整个缓冲区初始化为0,否则此代码不起作用。

无论如何strlen 不是在缓冲数据时使用的好选择,即使您知道自己正在使用可打印的字符串数据,只是因为{{1每次遍历字符串只是为了得到你的长度。

保留一个单独的柜台,例如strlen,仅在numRead位置附加到buf,并按您所阅读的金额递增numRead