繁体   English   中英

Ansi C:尝试计算文件中的总字符数

[英]Ansi C: Attempting to count total chars in a file

任务很简单,但是方法返回0时遇到问题。

这意味着我的循环:

int getCharCount(FILE *fp) {
    int c;
    int i = 0;
    while( (c = fgetc(fp)) != EOF)  {
        i++;
        printf("Loop ran");
    }
    return i;
}

没有运行。

在我的测试中,我发现循环永远不会运行,因为“循环运行”从未打印出来。 我是c语言的新手,不确定在尝试计算文件中的字符数时是否做错了什么。

我觉得我应该提到该文件以“ wb +”模式打开,并且有一些很长的方法可以编辑该文件。 基本上,在使用此getCharCount()方法之前,将文本文件中的所有先前数据清除,然后用户一次输入多个44个字符长度的字符串,而我使用我刚刚发布的此方法来计算将使用的字符总数浏览我的显示数据方法。

我正在图书馆工作,因此,如果需要张贴任何其他内容或需要澄清任何内容,我将尽量快速答复。 我不想发布我的整个代码,因为有可能会作弊,我需要自己完成。

谢谢你

如果您写入文件,然后在同一文件句柄上调用方法,则该文件句柄已经在文件末尾,因此它将立即看到EOF。 我们需要查看更多代码以确保我认为。

因此,您可以在函数开始时倒回文件句柄。

或者,您可以仅调用ftell来查找文件中的偏移量,该偏移量与截断,写入和不倒带时写入的字节数相同。

您正在使用w+模式打开,它将截断文件。 在fopen手册页中:

w +开放供阅读和写作。 如果该文件不存在,则创建该文件,否则该文件将被截断。 流位于文件的开头。

如果您正在从文件读取并且仍要写入文件,则将要使用rb+而不是wb+来打开它。 如果您已经写了它,并且想阅读所写的内容,则需要寻找文件指针的开头。

// Both of these seek to the start
rewind(fp);
fseek(fp, 0, SEEK_SET);

为什么您必须一一读取所有字节才能计数? 使用ftell( fp )进行fseek( fp, 0, 2 )跳转到文件末尾并获取当前位置(文件长度)要容易得多。

如果文件未打开,则可以使用:

off_t getFileSize(const char *filepath) {
   struct stat fileStat;
   stat(filepath, &fileStat);
   return(fileStat.st_size);
}

如果文件已打开:

off_t getFileSize(int fd) {
   struct stat fileStat;
   fstat(fd, &fileStat);
   return(fileStat.st_size);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM