【发布时间】:2017-02-10 10:49:14
【问题描述】:
我正在尝试从 .txt 文件中读取,直到点击字符“=”。文本文件总是一样的,只包含这些字符串:
TaskLimit=3
cc pr.c && ./a.out
有时代码运行良好并退出 while 循环,有时它会打印“TaskLimit”,但随后会抛出“Segmentation fault (core dumped)”错误。任何想法我做错了什么?我应该清除 buf[] 还是什么?
char buf[1];
file = open(argv[1], O_RDONLY);
if (file == -1){
perror("Error opening file");
exit(1);
}
while(1){
read(file, buf, 1);
if(buf[0]=='=') {printf("I'm out");break;}
printf("%c",buf[0]);
//further actions
编辑: 在“进一步的行动”中,我试图将 char 转换为 int,这似乎是问题所在:
char limit_char[0];
int limit;
read(file,limit_char,1);
limit=atoi(limit_char[0]);
编辑2: 改变这一行
limit=atoi(limit_char[0]);
到
limit=atoi(&limit_char);
帮助。
【问题讨论】:
-
如何检查
read调用是否真的成功?如果它给出错误,了解什么错误可能很有用。 -
我假设
plik应该是file?请也进行编辑以解决此问题。 -
无论如何,您应该在此类问题中提供minimal reproducible example。您显示的代码中没有任何内容会产生段错误。
-
除非你正在做例如非阻塞 I/O,否则一般建议你使用 C 标准
fopen()和相关函数而不是 POSIXopen() -
与您的问题无关:一次从文件中读取 1 个字节不是一个好主意。