【发布时间】:2019-12-21 08:56:10
【问题描述】:
我尝试编写获取字符数组的函数,从文件中插入行来自重定向,并返回文件的长度。
我试过了:
#define LINE 256
int getline1(char s[]){
char ch;
int length = 0;
scanf("%c", &ch);
while(ch != '\n' && ch != EOF){
s[length++] = ch;
scanf("%c", &ch);
}
s[length] = '\0';
return length;
}
int main(){
char line[LINE];
while(getline1(line) != 0){
printf("%s\n", line);
char line[LINE];
}
return 0;
}
但我遇到分段错误,我不明白为什么?
输入 ./main find_input.txt: 一个 b 已编辑: 我在 while 中添加了 while(ch != '\n' && ch != EOF && length < LINE),但现在我得到了一个垃圾。出于某种原因,我没有在文件末尾退出。
【问题讨论】:
-
您声明了两次
char line[LINE];。一次在外面,一次在while块内。块内的那个没有初始化,可能会导致打印很长的%s,其中包含大量垃圾。删除块中的定义 -
@PaulOgilvie 你是对的,但块内的那个从未使用过
-
Gal Leshem,不要编辑您寻求支持的代码错误。
-
Gal Leshem,当我说“删除块中的定义”时,我的意思是从你的代码中删除它,尝试一下,如果它解决了问题,然后报告。我并不是要从您发布的代码中删除它。
-
scanf() 返回读取的字符数,或 EOF... EOF 未放入变量“ch”中。你应该在你的 while() 中检查它的返回码(它是一个 INT)。换句话说 "int rc; rc = scanf("%c", &ch); while(rc == 1 && ch != '\n' && length
标签: c