我正在尝试编写一个程序,该程序应该能够在终端中将文件作为输入,然后确定文件是空的还是用ASCII文本写的。但我一直在分段错误11.
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
unsigned char c;
int size;
FILE *file = fopen(argv[1], "r");
fseek(&c, 0, SEEK_END);
size = ftell(file);
if (size == 0)
{
printf("file is empty\n");
}
fclose(file);
FILE *file = fopen(argv[1], "r");
c = fgetc(file);
if (c != EOF && c <= 127)
{
printf("ASCII\n");
}
fclose(file);
}
为什么有任何想法?
答案 0 :(得分:4)
1] fseek没有第一个参数unsgined char*
,但是FILE*
。
fseek(file, 0, SEEK_END);
2]您不应使用unsigned char
/ char
来检查EOF
,请务必使用int
。
3]工作简单的代码
int main(int argc, char *argv[])
{
if (argc < 2)
{
// err we havent filename
return 1;
}
int c;
FILE *file = fopen(argv[1], "r");
if (file == NULL)
{
// err failed to open file
return 1;
}
c = fgetc(file);
if (c == EOF)
{
printf("empty\n");
fclose(file);
return 0;
}
else
{
ungetc(c, file);
}
while ((c = fgetc(file)) != EOF)
{
if (c < 0 || c > 127)
{
// not ascii
return 1;
}
}
printf("ascii\n");
fclose(file);
return 0;
}
答案 1 :(得分:2)
fseek(&c, 0, SEEK_END);
这里你应该传递文件描述符,比如
fseek(file, 0, SEEK_END);
答案 2 :(得分:1)
fseek将一个FILE *作为参数,你给它一个unsigned char * - 更改&amp; c to file。