Я пытаюсь написать программу, которая удаляет конечные пробелы/табуляции из строк ввода (упражнение 1-18 из K & R).Ошибка выполнения: ошибка сегментации (core dumped)
/* Write a program to remove trailing blanks and tabs from each
line of input, and to delete entirely blank lines. */
#include <stdio.h>
#define MAXLINE 1000
int gettline(char s[], int lim);
main()
{
int len, i;
char line[MAXLINE];
while ((len = gettline(line, MAXLINE)) > 0)
for(i=0; i<len-1; ++i){
if (line[i]!= ' ' && line[i]!='\t')
printf("%s", line[i]);
}
printf("\n");
return 0;
}
/* gettline: read a line into s, return length */
int gettline(char s[], int lim)
{
int c, i;
for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if (c == '\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
Когда я запустил его, я получаю сообщение об ошибке Segmentation fault (core dumped)
. Я просмотрел некоторые другие вопросы с той же темой (1, 2, 3, 4, ..), но они были слишком сложны для моего уровня. Я знаю только, что ошибка означает, что я попытался получить доступ к части памяти, на которую мне было запрещено. Я не знаю, где именно это произошло в моем случае
Есть ли причина, по которой вы не используете' fgets' для чтения вашего файла по строкам? –
Вы запустили gdb? – Vladp
Прошу прощения, но я новичок в C, и я читаю K & R с самого начала. Я должен решить проблему без использования библиотек. @ Vladp Hm, no. Я только побежал его через valgrind, и он не дал никаких ошибок. – Omid