C语言 移动文件指针时出现问题

dsf9zpds  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(201)

我正在尝试将文件指针移动到当前行的末尾。我使用print语句检查它是否在当前行的末尾,但它在下一行的末尾打印。我试过ChatGPT,但它的解决方案不起作用。代码在下面。
主要相关部分:

  1. clearFile("TEMP.yaml");
  2. FILE *yamlFile = fopen("TEMP.yaml", "a");
  3. writeNewVal(yamlFile, "test", "");
  4. writeNewVal(yamlFile, "mess", " test");
  5. printf("%ld \n", ftell(yamlFile));
  6. fseek(yamlFile, 1, SEEK_SET);
  7. moveBelowDown(yamlFile);

字符串
moveBelowDown的相关部分:

  1. void moveBelowDown(FILE *file)
  2. {
  3. //* Move fptr to end of current line
  4. char current;
  5. while ((current = fgetc(file)) != '\n' && current != EOF)
  6. ;
  7. fseek(file, -1, SEEK_CUR);
  8. fprintf(file, "TEST");


目前YAML中的值看起来像这样:

  1. test:
  2. mess: testTEST


我想让它看起来像这样:

  1. test: TEST
  2. mess: test

1tuwyuhd

1tuwyuhd1#

发布的代码中存在多个问题:

  • current必须定义为int,以允许可靠地测试文件结尾。EOF具有与fgetc()返回的所有字节值不同的负值,但char类型无法处理fgetc()返回的所有可能值,因此char类型要么是无符号的,从不与EOF进行比较,要么是有符号的,并且EOF无法与法律的字节值(在大多数体系结构中为255)区分开来。
  • 该文件必须以二进制模式打开,"ab"fseek()才能正确地操作相对偏移量。
  • 你必须发出调用fseek()当改变从阅读到写(你这样做)和回读(你不)
  • 向后查找对于写入打开的文件是无效的,因此程序不能在这种模式下工作。您应该打开文件进行读取和更新(“r+B”)或写入和更新(如果它不存在)(“w+b”)。
  • 您似乎期望fprintf将其输出插入文件中的当前位置:这不起作用,并且没有办法在现有文件中实现这一点。您应该将文件加载到内存中,并将修改后的版本写回,最好是写回不同的文件。

相关问题