C 使用fseek计算文件字符数

C 使用fseek计算文件字符数,c,file-io,fseek,C,File Io,Fseek,我想像这样计算文件字符数: #include <stdio.h> #include <stdlib.h> int main(){ int d=0; char filename[25]; FILE *file; printf("Enter file name to be read (Text File!) : "); gets(filename); file = fopen(filename, "rt"); if(f

我想像这样计算文件字符数:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int d=0;
    char filename[25];
    FILE *file;
    printf("Enter file name to be read (Text File!) : ");
    gets(filename);
    file = fopen(filename, "rt");
    if(file == NULL){
        printf("Failed to open file...");
        exit(1);
    }
    fseek(file, 0L, SEEK_SET);
    while( !feof(file) ){
        fseek(file, 1L, SEEK_CUR);
        d++;
    }
    printf("%d", d);
}
#包括
#包括
int main(){
int d=0;
字符文件名[25];
文件*文件;
printf(“输入要读取的文件名(文本文件!):”;
获取(文件名);
file=fopen(文件名,“rt”);
if(file==NULL){
printf(“无法打开文件…”);
出口(1);
}
fseek(文件,0L,搜索集);
而(!feof(文件)){
fseek(文件、1L、SEEK\u CUR);
d++;
}
printf(“%d”,d);
}
在这之后,我打印d,它的值是0。。
文件中有字符。大约150个字符。

我想知道程序是否会返回,因为
feof()
永远不会返回任何
0

成功呼叫 函数的作用是:清除流的文件结束指示符


要使用
fseek()确定文件大小,请执行以下操作:

FILE * pf = ...;

fseek(pf, 0, SEEK_END);
long size = ftell(pf);
fseek()

要获取文件大小,您可以
fseek(file,0,SEEK\u END)
然后调用
ftell(file)


要逐个字符读取,可以使用for(i=0;fgetc(文件)!=EOF;i++)

我在最后这样做了,它成功了

fseek(file, 0, SEEK_END);
然后打电话 ftell(文件)

在我尝试这样做之前:

for (i = 0; fgetc(file) != EOF; i++);
它不起作用……但现在它是0.0
谢谢大家

调用
fopen()
中的
“t”
是什么?@alk:它是Windows标准的“文本”文件,而不是“二进制”文件。这是没有必要的;它在Windows上是允许的。当我在Debian系统上运行它时,
while
循环永远不会终止,因为
fseek()
调用没有设置文件的EOF标志。(查找超过文件结尾不是错误,因为您可以查找然后写入以使文件变大。)啊,是的。。。真是太棒了。感谢@jonathanlefflerfora text stream,offset应为零,或者offset应为先前成功调用ftell函数返回的值,该函数位于与同一文件相关联的流上,并从中进行设置。,…因此,这个程序只是一个有点奇怪的ftell示例:返回值是实现定义的,如果文本流为。我就是这样做的:。。(我不知道如何为(i=0;fgetc(文件)!=EOF;i++)添加代码标记…我是新的);我得到i=0,但文件中有字符。。如果我把它写入数组,那么一切都很好。但是我想把这个数组命名为malloc。@user3423498对我来说效果很好。这是我测试的代码,按照你说的做了。fseek(文件,0,SEEK_END),然后调用ftell(文件)。