同时从文件中写入和读取

Ana*_*ubi 3 c file writefile readfile

我一直试图同时从文件中读取和写入,并且我试图将text.txt内容中的所有选项卡替换为空格.这是我的代码:

int main()
{
   FILE* filePtr = fopen("text.txt", "w+");

   char c;
   c = fgetc(filePtr);
   fpos_t num;
   while(c != EOF)
   {
       if(c == '\t')
       {
           fgetpos(filePtr, &num);
           num--;
           fsetpos(filePtr, &num);
           fputc(' ', filePtr);
       }
       c = fgetc(filePtr);
   }
}
Run Code Online (Sandbox Code Playgroud)

text.txt的内容如下:

嗨\ t我的名字\ t是\ t杰克!

当我运行此代码时,text.txt文件中的输出只是空格.那里没有人物.我该怎么做才能让替换按预期进行?

Joh*_*ger 8

您的代码有三个主要问题:

  1. 使用mode打开文件会"w+" 截断文件(删除所有内容).您可以读取和写入它,但原始内容将丢失.模式"r+"将打开它进行读取和写入而不更改内容,并且文件位置最初位于文件的开头.

  2. 对类型值执行算术是不安全的fpos_t.无论如何它是不必要的; 有一种更简单的方法来移动文件位置的相对数量.

  3. 完成后不要关闭文件.

您的代码的这种变化适合我:

#include <stdio.h>

int main(void)
{
   FILE* filePtr = fopen("text.txt", "r+");
   char c;

   while((c = fgetc(filePtr)) != EOF)
   {
       if(c == '\t')
       {
           fseek(filePtr, -1, SEEK_CUR);
           fputc(' ', filePtr);
       }
   }
   fclose(filePtr);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)