我是C语言的新手,我正在尝试从文本文件中删除一行,我所拥有的代码删除了指定的行,但末尾留下了特殊的�
字符,我不知道为什么或如何做修复它。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void removeBook(int line) {
FILE *file = fopen("bookrecord.csv", "r");
int currentline = 1;
char character;
FILE *tempfile = fopen("temp.csv", "w");
while(character != EOF) {
character = getc(file);
printf("%c", character);
if (character == '\n') {
currentline++;
}
if (currentline != line) {
putc(character, tempfile);
}
}
fclose(file);
fclose(tempfile);
remove("bookrecord.csv");
rename("temp.csv", "bookrecord.csv");
}
void main() {
removeBook(2);
}
在我的文本文件中,我在单独的行上有Test1
和Test2
,在行1上有Test1
,在行2上有Test2
。运行该函数时,它将删除第2行(Test2
),但保留特殊的�
字符。为什么?
答案 0 :(得分:0)
代码中有问题:
character
必须定义为int
才能处理所有字节值和EOF
返回的特殊值getc()
。character
在第一个测试中未初始化,其行为未定义。character
读取的数据,因此您将'\377'
字节值存储在输出文件的末尾,在系统上显示为�
,以及在其他一些系统上的ÿ
。main
的原型是int main()
,而不是void main()
。这是更正的版本:
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int removeBook(int line) {
FILE *file, *tempfile;
int c, currentline;
file = fopen("bookrecord.csv", "r");
if (file == NULL) {
fprintf("cannot open input file bookrecord.csv: %s\n", strerror(errno));
return 1;
}
tempfile = fopen("temp.csv", "w");
if (tempfile == NULL) {
fprintf("cannot open temporary file temp.csv: %s\n", strerror(errno));
fclose(tempfile);
return 1;
}
currentline = 1;
while ((c = getc(file)) != EOF) {
if (currentline != line) {
putc(c, tempfile);
}
if (c == '\n') {
currentline++;
}
}
fclose(file);
fclose(tempfile);
if (remove("bookrecord.csv")) {
fprintf("cannot remove input file bookrecord.csv: %s\n", strerror(errno));
return 1;
}
if (rename("temp.csv", "bookrecord.csv")) {
fprintf("cannot rename temporary file temp.csv: %s\n", strerror(errno));
return 1;
}
return 0;
}
int main() {
return removeBook(2);
}