【发布时间】:2021-03-06 08:31:30
【问题描述】:
我正在编写一个 C 程序,将某个文件中的所有大写字符更改为小写。问题是,在将所有字符(已处理)存储在字符串中并尝试打印该文件中的所有字符之后,它们被附加到该文件中,而不是被覆盖。我使用"r+" 作为权限。
这是我的代码:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX 1024
int main(int argc, char **argv)
{
if (argc != 2) {
printf("Invalid number of arguments.\n");
exit(1);
}
FILE *f = fopen(argv[1], "r+");
if (f == NULL)
{
printf("Could not open specified file.\n");
exit(2);
}
char buf[MAX];
int len = 0;
while(!feof(f))
{
int c = fgetc(f);
if (c >= 'A' && c <= 'Z')
c = tolower(c);
if (c != EOF) {
buf[len] = c;
len++;
}
}
for (int i = 0; buf[i] != '\0'; i++)
fputc(buf[i], f);
fclose(f);
return 0;
}
fputs(buf, f) 也有同样的问题。即使在附加之后,一些“奇怪”的字符也会出现在所选文件的末尾。
到底是什么问题?我该如何解决?谢谢你。帮助将不胜感激。
【问题讨论】:
-
因为你用
r+打开文件 -
@PaulOgilvie 打开它的正确方法是什么?我想读它,也想写它。
-
读取文件后,关闭并用
w重新打开覆盖。 -
注意:
while(!feof(f))不会按照你的想法做。查找文档。 -
注意:
char buf[MAX];未初始化。for (...buf[i] != '\0'将不起作用。