我需要在文件的每一行末尾添加一个文本。我有以下代码:
FILE *tmp_copy = tmpfile();
file = fopen ( argv[2], "rw" );
if ((file != NULL )) {
char line [ 128 ]; /* or other suitable maximum line size */
while( ( fgets ( line, sizeof line, file ) != NULL )) {
fputs(line, tmp_copy);
}
fclose ( file );
rewind(tmp);
char *p;
/* Reopen file now with write permissions */
fopen(argv[2], "w");
while (( p = fgets(line, 1024, tmp))!=NULL) {
//line[strlen(line)-1] = '\0'; /* Clear away newline */
//sprintf(line, "%s %s\n", line, more);
strcpy(line,"true");
//fputs(line, file);
}
fclose(file);
fclose(tmp);
}
}
我编辑了我的代码。还是行不通 但它不起作用。为什么呢?
答案 0 :(得分:4)
我猜你想要再次将该行重新写入该文件。但是,您不是写到文件,只是附加到内存中的数据。也不可能同时读取和写入文件,你必须分两步完成:
编辑:我的回答的伪代码:
original_file = fopen(original_file_name, "r");
temporary_file_name = tmpnam("dummy");
temporary_file = fopen(temporary_file_name, "w");
while (fgets(line, original_file))
{
remove_trailing_newline(line);
strcat(line, " TRUE\n");
fputs(line, temporary_file);
}
fclose(temporary_file);
fclose(original_file);
rename(temporary_file_name, original_file_name);
答案 1 :(得分:0)
除非文件是内存映射的,否则fgets会返回一个指向原始缓冲区的指针(它不会。它需要追加null。)并且strcat就地运行(确实如此),那么你就不存储任何内容,只是弄乱了一些记忆。即使它确实有效,你也会覆盖下一行的一部分。 你需要