首页 > 解决方案 > 文本行字符在c中动态计数

问题描述

   char *line = NULL;
   int count=0;
   line = (char*)malloc(sizeof(char));
   while(fgets(line,sizeof(line),file)){
        line = realloc(line,sizeof(char*)); // dynamically increase allocate memory
        count++;
   }
   printf("count number :%d\n",count);
   free(line);

我正在尝试计算每一行阅读文本中的字符,但现在只尝试一行。每次计数都是 4,即使我给出了更多的字符串。我很困惑 。请帮我 !!

标签: cfile-handling

解决方案


一些问题:

首先,你想要一条线:

line = (char*)malloc(sizeof(char));

这相当于分配一个字节 -sizeof(char)并将其地址存储到line. 也许您想获得更大的缓冲区来从文件中获取一些字符。一种方法是定义一个常量大小:

#define BUFFER_SIZE 256
line = (char *)malloc(sizeof(char) * BUFFER_SIZE);

之后,您同时运行计数器。

while(fgets(line,sizeof(line),file))

也是错误的,因为您最多想读取sizeof(line)字节,这相当于sizeof(char *). 它是 32 位或 64 位,具体取决于您的系统架构。

您想读取尽可能多的缓冲区大小,这意味着您想读取最多BUFFER_SIZE字符。所以最好这样做:

while(fgets(line,sizeof(char) * BUFFER_SIZE, file))
{
      /* do stuff */
}

这是一个警告:使用fgets危险的。如果您想从文件中获取字节并计算它们,您可以使用fread

size_t tmp;
while(tmp = fread(line, sizeof(char), BUFFER_SIZE, file))
{
    count += tmp;
    /* do stuff on line */
}

但是,如果您只想获取文件的大小,请查看其他帖子


推荐阅读