C 写一个函数,替换文件第一行内容
时间: 2023-11-27 11:55:19 浏览: 28
可以使用以下代码实现替换文件第一行内容:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void replace_first_line(char *filename, char *new_content) {
FILE *fp = fopen(filename, "r+");
if (fp == NULL) {
printf("Failed to open file: %s\n", filename);
return;
}
// 读取第一行内容
char first_line[256];
fgets(first_line, sizeof(first_line), fp);
size_t first_line_len = strlen(first_line);
if (first_line_len > 0 && first_line[first_line_len - 1] == '\n') {
first_line[first_line_len - 1] = '\0'; // 去掉换行符
}
// 将文件指针移回开头,写入新内容
fseek(fp, 0, SEEK_SET);
fputs(new_content, fp);
// 如果新内容比原来的第一行短,需要在末尾补空格
size_t new_content_len = strlen(new_content);
if (new_content_len < first_line_len) {
size_t padding_len = first_line_len - new_content_len;
for (size_t i = 0; i < padding_len; i++) {
fputc(' ', fp);
}
}
// 将原来的第一行后面的内容复制到新位置
char buf[1024];
size_t pos = ftell(fp);
while (fgets(buf, sizeof(buf), fp)) {
size_t len = strlen(buf);
fwrite(buf, 1, len, fp);
pos += len;
}
// 截断文件
ftruncate(fileno(fp), pos);
fclose(fp);
}
```
使用方法:
```c
int main() {
replace_first_line("test.txt", "Hello, world!");
return 0;
}
```
其中,`filename` 参数为要替换的文件名,`new_content` 参数为新的第一行内容。如果新内容比原来的第一行短,会在末尾补空格;如果新内容比原来的第一行长,会覆盖后面的内容。