我正在尝试将文件指针移动到当前行的末尾。我使用print语句检查它是否在当前行的末尾,但它在下一行的末尾打印。我试过ChatGPT,但它的解决方案不起作用。代码在下面。
主要相关部分:
clearFile("TEMP.yaml");
FILE *yamlFile = fopen("TEMP.yaml", "a");
writeNewVal(yamlFile, "test", "");
writeNewVal(yamlFile, "mess", " test");
printf("%ld \n", ftell(yamlFile));
fseek(yamlFile, 1, SEEK_SET);
moveBelowDown(yamlFile);
字符串
moveBelowDown的相关部分:
void moveBelowDown(FILE *file)
{
//* Move fptr to end of current line
char current;
while ((current = fgetc(file)) != '\n' && current != EOF)
;
fseek(file, -1, SEEK_CUR);
fprintf(file, "TEST");
型
目前YAML中的值看起来像这样:
test:
mess: testTEST
型
我想让它看起来像这样:
test: TEST
mess: test
型
1条答案
按热度按时间1tuwyuhd1#
发布的代码中存在多个问题:
current
必须定义为int
,以允许可靠地测试文件结尾。EOF
具有与fgetc()
返回的所有字节值不同的负值,但char
类型无法处理fgetc()
返回的所有可能值,因此char
类型要么是无符号的,从不与EOF
进行比较,要么是有符号的,并且EOF
无法与法律的字节值(在大多数体系结构中为255)区分开来。"ab"
,fseek()
才能正确地操作相对偏移量。fseek()
当改变从阅读到写(你这样做)和回读(你不)fprintf
将其输出插入文件中的当前位置:这不起作用,并且没有办法在现有文件中实现这一点。您应该将文件加载到内存中,并将修改后的版本写回,最好是写回不同的文件。