文件中的字符数?

9 浏览
0 Comments

文件中的字符数?

请问是否有一种方法可以从文件中读取字符并将它们保存到一个没有指定长度的数组中。\n在正常情况下,我会先读取所有的字符并进行计数(步骤1)。然后,我使用malloc创建数组,并从文件中读取字符,因此我不得不两次读取整个文件。是否可以只用一次读取来完成呢?

0
0 Comments

问题的出现原因是打开文件时使用了错误的模式,导致无法正确计算文件中的字符数。解决方法是使用二进制模式打开文件,并使用fseek和ftell方法计算文件的字节长度。

在上述解决方法中,我们应该使用"rb"模式来打开文件,即二进制模式,以使解决方法正常工作。如果使用简单的"r"或"a"模式打开文件,则文件将以文本模式打开。fseek和ftell方法可以给出整个文件的字节长度。

如果您正在处理二进制数据(不要使用fscanf/fprintf),即使用fread和fwrite,那么这个解决方法最适合您。如果使用fscanf/fprintf/fgets,我不确定是否会起作用。

例如

#include<stdio.h>
int main() {
  FILE *fid;
  char *data;
  long int size;
  fid = fopen("filename", "rb");
  fseek(fid, 0l, SEEK_END);
  size = ftell(fid);
  data = (char *) malloc(size);
  fseek(fid, 0l, 0);
  data = fread(data, 1, size, fid);
  // Use the data !!
}

0
0 Comments

问题:如何在文件中找到字符的个数?

C语言中,我们可以通过找到文件的大小来确定文件中字符的个数。具体的实现方法如下:

int size = 0;
char* aFileContents = NULL;
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
fseek(fp, 0L, SEEK_SET);  // 重置文件指针
aFileContents = (char*)malloc(size);
// 使用数据
free(aFileContents);

上述代码中,我们首先使用`fseek`将文件指针移动到文件的末尾,然后使用`ftell`获取文件指针的位置,即文件的大小。然后,我们再次使用`fseek`将文件指针重置到文件的开头,以便后续操作。最后,我们使用`malloc`函数为`aFileContents`动态分配内存空间,并将文件内容读入其中。

然而,需要注意的是,`fseek`函数返回的值取决于文件的打开模式。如果文件以普通/文本模式打开,则`ftell`返回一个未指定的值,只有在`fseek`中才有意义。如果文件以二进制模式打开,则`ftell`返回以字节为单位的位置。

需要注意的是,上述方法只适用于固定宽度编码。对于Unicode或其他变宽度编码,这种方法是不可行的。

0
0 Comments

问题的出现原因:

根据给出的代码,问题出现在第4行。编译器报错:[Error] invalid conversion from 'void*' to 'char*' [-fpermissive]。这是因为编译器将其视为C++代码进行编译,因此需要进行类型转换。因此,OP应该将其标记为C来编译。

解决方法:

将代码标记为C来编译,即在编译时指定编译语言为C。

然而,需要注意的是,设置文件位置指示器为文件末尾(使用fseek(file, 0, SEEK_END))对于二进制流(可能存在尾随的空字符)或具有状态依赖编码且不确定以初始转换状态结束的任何流来说,都具有未定义的行为。因此,不能保证通过这种方式获取文件的大小。

请注意,根据我所了解,我从未遇到过您所描述的问题。

0