【发布时间】:2014-09-09 13:30:17
【问题描述】:
我正在尝试编写一个从输入行中删除尾随空格/制表符的程序(来自 K&R 的练习 1-18)。
/* 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)。我查看了其他一些具有相同主题的 SO 问题(1、2、3、4,..),但它们对于我的水平来说太复杂了。我只知道这个错误意味着我试图访问我不允许访问的部分内存。我不确定我的情况到底发生在哪里
【问题讨论】:
-
您是否有理由不使用
fgets逐行读取文件? -
很抱歉,我完全是 C 语言的初学者,我从头开始阅读 K&R。我应该在不使用库的情况下解决问题。 @Vladp 嗯,不。我只通过 valgrind 运行它,它没有给出任何错误。
标签: c segmentation-fault