【问题标题】:Runtime Error: Segmentation fault (core dumped)运行时错误:分段错误(核心转储)
【发布时间】: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 问题(1234,..),但它们对于我的水平来说太复杂了。我只知道这个错误意味着我试图访问我不允许访问的部分内存。我不确定我的情况到底发生在哪里

【问题讨论】:

  • 您是否有理由不使用fgets 逐行读取文件?
  • 很抱歉,我完全是 C 语言的初学者,我从头开始阅读 K&R。我应该在不使用库的情况下解决问题。 @Vladp 嗯,不。我只通过 valgrind 运行它,它没有给出任何错误。

标签: c segmentation-fault


【解决方案1】:

seg错误的原因应该是这样的:

    for(i=0; i<len-1; ++i){
        if (line[i]!= ' ' && line[i]!='\t')
            printf("%s", line[i]); 
    }

由于%sprintf() 需要char * 参数,但您传递了一个字符。 将其更改为printf( "%c", line[i] );,它应该会运行。

但是 它仍然无法实现您所说的(“删除尾随空格/制表符”),因为您不会打印 任何 个空格或制表符,“Hello World”将变为“HelloWorld”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2012-11-19
    • 1970-01-01
    • 2014-09-30
    • 2015-06-25
    相关资源
    最近更新 更多