我正在尝试使用系统调用和C.我正在尝试读取文件并将所有内容写入命令行。我正在尝试
int handle = open("./test.txt", O_RDONLY, O_TEXT);
char buf[1];
lseek(handle, 0, SEEK_SET);
while (0 != read(handle, buf, 1)) {
printf(*buf);
}
此ALMOST有效,除了它在从文件读取的每个字符后添加一些乱码字符。例如,如果文件包含asd asd
,则会将a:_s:_d:_ :_a:_s:_d
写入控制台。知道为什么吗?我该如何解决?
答案 0 :(得分:2)
每个字符串都必须以\0
(null)字符结尾。
因此,请尝试将缓冲区大小设为2,并在printf
之前buf[1] = '\0';
通常,当您阅读wcnt (type ssize_t)
个字符时,您会buf[wcnt] = '\0';
此外,您的printf未正确<*>>语法!
printf("%s", buf);
编辑:正如其他答案和评论中提到的(我不会添加它,因为我没有先提出它),你可以在这种情况下打印一个字符。
答案 1 :(得分:2)
您的代码应该在大多数现代编译器上产生警告。因为printf()
不接受 char 。由于您正在通过char读取文件char,因此您可以使用putchar()
在stdout上打印。
while (read(handle, buf, 1) == 1) {
putchar(buf[0]);
}