我正在尝试编写一个程序,从输入行中删除尾随空格/制表符(练习1-18来自K& R)。
/* 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,..),但它们对我的级别来说过于复杂。我只知道错误意味着我试图访问我不允许的部分内存。我不确定在我的案件中究竟发生了什么
答案 0 :(得分:3)
seg故障的原因应该是:
for(i=0; i<len-1; ++i){
if (line[i]!= ' ' && line[i]!='\t')
printf("%s", line[i]);
}
由于%s
,printf()
需要char *
参数,但您传递的是一个字符。
将其更改为printf( "%c", line[i] );
,它应该运行。
<强>但是强> 它仍然不会按你所说的去做(&#34;删除尾随空格/标签&#34;),因为你不会打印任何空格或标签,&# #34; Hello World&#34;将成为&#34; HelloWorld&#34;