我正在学习C,并且一直在尝试读取文件并打印刚刚读取的内容。我打开文件,需要调用另一个函数来读取并返回刚刚读取的句子。如果一切正常,我的函数将返回1,否则返回0。我一直在尝试使其工作一段时间,但我真的不明白为什么我无法设法赋予line
它价值。在主要情况下,它总是打印(空)。
项目的结构必须保持不变,我绝对必须使用open
和read
。不要翻脸,或者别的什么……如果有人可以向我解释这太棒了。
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define BUFF_SIZE 50
int read_buff_size(int const fd, char **line)
{
char buf[BUFF_SIZE];
int a;
a = read(fd, buf, BUFF_SIZE);
buf[a] = '\0';
*line = strdup(buf);
return (1);
}
int main(int ac, char **av)
{
char *line;
int fd;
if (ac != 2)
{
printf("error");
return (0);
}
else
{
if((fd = open(av[1], O_RDONLY)) == -1)
{
printf("error");
return (0);
}
else
{
if (read_buff_size(fd, &line))
printf("%s\n", line);
}
close(fd);
}
}
这里:
char buf[BUFF_SIZE];
int a;
a = read(fd, buf, BUFF_SIZE);
buf[a] = '\0';
如果字符数多于BUFF_SIZE
可供读取的字符数,则将完全填满数组,并且buf[a]
将超出数组末尾。您应该将的大小增加buf
一个字符:
char buf[BUFF_SIZE + 1];
或者,从逻辑上给定您的宏名称,少读一个字符:
a = read(fd, buf, BUFF_SIZE - 1);
您还应该检查来自strdup()
和的返回read()
错误,因为它们都可能失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句