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

标签 c arrays string char buffer

我写了下面的代码,但我不明白为什么 read 没有按照我期望的方式存储字符:

char temp;
char buf[256];

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

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

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

我是否漏掉了一些明显的东西?

最佳答案

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

buf[0] = 0;

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

您还应该检查对 read(2) 的调用中的错误——如果它返回 -1 或 0,您应该跳出循环,因为这意味着发生错误或者您到达了文件/输入流的末尾。

关于c - 如何使用 read 将字符正确存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459839/

相关文章:

c - 如何在 C 中使用 pstree 显示子进程

c++ - 可内存的 32 位值作为常量

javascript - 将新函数插入数组 - Javascript

arrays - 查找第一个可用名称的高效算法

java - 在 java 或 joda time 中使用格式化字符串添加分钟

c - 为什么三次运算sizeof的结果是4?

c - 如何将 malloced 变量传递给结构到 C 中新创建的结构

php - 是否可以将 SQL Select 请求与 PHP 数组结合起来,并在命令键上进行内连接

C# 将小数转换为指定格式的字符串

python - 使用 python 编程时在迭代时修改列表