c - 为什么从文件中读取()总是以分界线结尾

标签 c readfile

测试.c

int main() {
    int fd = open("/test/aaa",O_RDONLY);
    char * str;
    int len;
    str = (char*)malloc(sizeof(char));
    len = read(fd,str,100);
    close(fd);
    printf("%s\n",str);
    free(str);
    str = NULL;
    return 0;
}

输出如下:

$echo 300 > /test/aaa
$gcc test.c -o test
$./test
300

$

这里为什么要换行输出?有安全的方法来乘坐它吗?还是我以错误的方式使用了 read()? 谢谢!

最佳答案

因为文件中有一个换行符,如果你用类似的东西转储它,你会看到它:

od -xcb /test/aaa

它在文件中的原因是因为你把它放在那里:echo 的默认行为是写下你给它的内容加上一个换行符。

如果您不需要换行符,请使用:

echo -n 300 >/test/aaa

此外,您还没有在 malloc 中分配足够的空间来存储除单个字符以外的任何内容,您可能想尝试:

str = malloc (100);

您还会注意到我转换malloc 的返回值——这在C 中是一个坏习惯,它完全能够隐式转换 >void * 返回任何其他指针。如果您显式转换,它可以隐藏某些细微的错误。

在 C 语言中 sizeof(char) 总是也是 1,因此您不需要将它乘以任何值。


老实说,如果我想要基于行的文件输入,read 不会是我的第一选择。有更好的选择,例如 fgets 来做这类事情。

关于c - 为什么从文件中读取()总是以分界线结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16561185/

相关文章:

javascript - 在回调函数之外访问node.js中readline和fs解析的数据

c - 一次读取一个文件一个字符

c - 如何使用结构创建数据库表

java - 如何使用java读取位文件mpeg视频

c - C 语言的链接列表在 Visual Studio 中运行正确,但在 Linux 中运行不正确

c - 多个匿名页面的提前错误

python - Python 中的 `next(f)` 、 `f.readline()` 和 `f.next()` 有什么区别?

node.js - 在循环中使用带有 fs.readFile 的 Promises

c - 如何查找数组中大于元素的个数

c - 尝试创建一个程序来检查回文和 semordinlap