删除文件指针指向的字符串
时间: 2023-08-14 17:02:10 浏览: 54
删除文件指针指向的字符串,需要先将指针移动到要删除的字符串的位置,然后使用文件操作函数将该字符串删除。具体步骤如下:
1. 使用文件操作函数 fseek() 将文件指针移动到要删除的字符串的位置。
2. 使用文件操作函数 fwrite() 将空字符覆盖要删除的字符串,实现删除。
3. 如果删除的是最后一个字符串,还需要使用文件操作函数 ftruncate() 将文件截断为新的长度。
示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *fp;
char filename[] = "test.txt";
char str[] = "Hello World!";
char str_to_delete[] = "World";
int str_len = strlen(str_to_delete);
char *buffer;
long file_size;
// 打开文件
fp = fopen(filename, "rb+");
if (fp == NULL) {
printf("File open error!\n");
exit(1);
}
// 获取文件大小
fseek(fp, 0, SEEK_END);
file_size = ftell(fp);
// 分配缓冲区
buffer = (char *) malloc(file_size);
if (buffer == NULL) {
printf("Memory allocation error!\n");
fclose(fp);
exit(1);
}
// 将文件内容读入缓冲区
rewind(fp);
fread(buffer, file_size, 1, fp);
// 查找要删除的字符串
char *str_ptr = strstr(buffer, str_to_delete);
if (str_ptr == NULL) {
printf("String not found!\n");
free(buffer);
fclose(fp);
exit(1);
}
// 移动文件指针到要删除的字符串的位置
long str_pos = str_ptr - buffer;
fseek(fp, str_pos, SEEK_SET);
// 删除字符串
fwrite("\0", 1, str_len, fp);
// 如果删除的是最后一个字符串,截断文件
if (str_pos + str_len == file_size) {
ftruncate(fileno(fp), str_pos);
}
// 关闭文件和释放缓冲区
free(buffer);
fclose(fp);
printf("String deleted successfully!\n");
return 0;
}
```
该示例代码打开名为 "test.txt" 的文件,从中读取内容到缓冲区,查找要删除的字符串 "World",将文件指针移动到该字符串的位置,使用 fwrite() 函数将该字符串删除,如果删除的是文件中的最后一个字符串,还使用 ftruncate() 函数将文件截断为新的长度。最后关闭文件和释放缓冲区。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)