测试.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/