我正在尝试从文件中打印最后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;
}
答案 0 :(得分:0)
:atof(),
变量i
未初始化。
它包含垃圾堆栈中的垃圾。地点。
此表达式:isdigit(s[i])
正在访问内存中的某个随机位置。
这是未定义的行为,可能/将导致seg故障事件。