我一直在尝试同时读取和写入一个文件,并且我正在尝试将 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);
}
}
text.txt的内容是这样的:
嗨\t 我的\t 名字\t 是\t jack !
当我运行这段代码时,我在 text.txt 文件中的输出只是空白。那里没有字符。我应该怎么做才能使替换按预期进行?
最佳答案
您的代码存在三个主要问题:
以
"w+"
模式打开文件 截断 文件(删除所有内容)。您可以对其进行读取和写入,但原始内容会丢失。模式"r+"
将在不更改内容的情况下打开它进行读写,文件位置最初位于文件的开头。对
fpos_t
类型的值进行算术运算是不安全的。反正没必要;有一种更简单的方法可以将文件位置移动相对数量。完成后不要关闭文件。
你的代码的这个变体对我有用:
#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;
}
关于c - 同时写入和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29677577/