从文件读取最后n个字节时的Segfault

时间:2017-03-19 08:13:02

标签: c pointers

我正在尝试从文件中打印最后n个字节。这是我的代码。我有分段错误。请有人告诉我这是什么错误? 以下是代码 -

#include <stdio.h>
#include <ctype.h>
void fileprint(int line,char s[]);  //to print last n lines
int atof(char s[]);
int main(int argc, char * argv[])   // tail filename 10
{
    if(argc == 1)
        printf("usage: tail");
    if(argc == 2)
        fileprint(10, argv[1]);
    if(argc == 3)
        fileprint(atof(argv[2]), argv[1]);
    if(argc > 3)
        printf("usage: tail ");
}

void fileprint(int line, char s[])
{
    int c;
    FILE * p = fopen(s, "r");    // pointer to file
    fseek(p, -line, SEEK_END);
    while((c = fgetc(p)) != EOF) {
        putchar(c);
    }
}

int atof(char s[])     //convert string int
{
    int i,n;
    for(n = 0;isdigit(s[i]); i++)
        n = 10 * n + (s[i] - '0');
    return n;
}

1 个答案:

答案 0 :(得分:0)

你的函数中的

:atof(),

变量i未初始化。

它包含垃圾堆栈中的垃圾。地点。

此表达式:isdigit(s[i])正在访问内存中的某个随机位置。

这是未定义的行为,可能/将导致seg故障事件。