在C语言中逐行读取每个字符

在C语言中逐行读取每个字符,c,C,我在寻找一个解决方案,如何从txt文件中逐行读取字符,我找到了一个,但我没有得到代码的某些部分。就是这样: #include <stdio.h> #include <stdlib.h> void handle_line(char *line) { printf("%s", line); } int main(int argc, char *argv[]) { int size = 1024, pos; int c; char *buffer

我在寻找一个解决方案,如何从txt文件中逐行读取字符,我找到了一个,但我没有得到代码的某些部分。就是这样:

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

void handle_line(char *line) {
  printf("%s", line);
}

int main(int argc, char *argv[]) {
    int size = 1024, pos;
    int c;
    char *buffer = (char *)malloc(size);

    FILE *f = fopen("myfile.txt", "r");
    if(f) {
      do { // read all lines in file
        pos = 0;
        do{ // read one line
          c = fgetc(f);
          if(c != EOF) buffer[pos++] = (char)c;
          if(pos >= size - 1) { // increase buffer length - leave room for 0
            size *=2;
            buffer = (char*)realloc(buffer, size);
          }
        }while(c != EOF && c != '\n');
        buffer[pos] = 0;
        // line is now in buffer
        handle_line(buffer);
      } while(c != EOF); 
      fclose(f);           
    }
    free(buffer);
    return 0;
}
缓冲区[pos++]做什么?它实际上增加了变量“pos”吗?还有,为什么它从1开始而不是0?(位置从0开始)。 我无法真正跟踪变量“pos”,也不知道为什么这里的buffer[pos]是0:

buffer[pos] = 0;
我阅读代码的方式是: 声明包含每行每个字符的缓冲区的大小(我的意思是,缓冲区在最后是空闲的,所以它保留了每行上的信息?),然后声明其他变量并分配缓冲区的内存。 打开文件myfile.txt,如果不为空,则将pos=0,然后将文件的第一个字符(现在函数指向下一个字符)设为“c”,如果c!=EOF表示未到达文件末尾,请将字符“c”保存在缓冲区的位置1(我在这里感到困惑,为什么是1而不是0)。然后,如果需要,realloc的内存将是以前的两倍。对行中的每个字符执行此操作,直到达到EOF或a\n。现在让buffer[pos]=0,我不知道“pos”的值是多少,我假设他让buffer[pos]=0表示行的结束?idk。打印行,直到到达文件末尾。关闭文件,释放缓冲区上的内存

救命啊!谢谢。

-从指定的输入流(fp)中读取下一个字符,并推进相关的文件位置指示器(无需)。如果成功,函数将返回读取的字符;否则,将返回值EOF(-1)

下面是一个非常简单的示例,使用fgetc()读取文件的每个字符(并使用fputc()将其写入另一个文件)


pos++
是一个后期增量;当
pos==0
时,它返回值
0
,但将
pos
增加到
1
buffer[pos]循环后的赋值=0可能会更清晰,因为
缓冲区[pos]='\0',表示分配了空字节,因此字符串以空结尾。确保字符串以null结尾非常重要。缓冲区[pos++]-这是一个post增量,因此如果pos从0开始,它将引用数组元素缓冲区[0],然后将pos设置为1。是的,缓冲区[pos]=0将字符串结尾字符放在刚刚读取的字符行的末尾。在这之后,它可以被视为一个c字符串,因此可以用printf()写出,只要看一眼c手册,和/或一个简单的测试程序就会回答你的问题!我怎么能忘记那件事啊哈。太好了!这是怎么一回事?而(c=fgetc(fp1))@kwrnel-只要结果>0,就会继续读取下一个字符。EOF(文件结尾)从
fgetc()
as-1返回,这将导致while循环退出。这是错误的!!!测试:`#include int main(){int c;while(c=-1){printf(“running…\n”)}返回0;}`@kwrnel-我不明白你在说什么。我发布的代码虽然只是一个简单的示例,但它编译、运行并用于读取一个文件,并将内容放入另一个文件中。你在上述评论中所写的内容与此无关。请解释你的观点。你是在使用作业作为条件。
buffer[pos] = 0;
char filename1[]={"c:\\play\\_in.txt"};//change paths as needed
char filename2[]={"c:\\play\\_out.txt"};

int main(void)
{
    FILE *fp1 = {0};
    FILE *fp2 = {0};
    int c=0;

    fp1 = fopen(filename1, "r");
    if(fp1)
    {
        fp2 = fopen (filename2, "w");
        if(fp2)
        {
            c = fgetc(fp1);
            while(c != EOF)
            {
                fputc(c, fp2);
                c = fgetc(fp1);
            }
            fclose(fp2);            
        }
        fclose(fp1);
    }

    return 0;
}