指针实每隔三个字符加入一个幸好c语言
时间: 2023-08-08 09:05:30 浏览: 40
可以按照如下的C语言代码来实现:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp1, *fp2;
char *buffer;
long fileLen;
// 打开文件
fp1 = fopen("zifu.txt", "rb");
if (!fp1) {
printf("无法打开文件 zifu.txt\n");
return 1;
}
// 获取文件长度
fseek(fp1, 0, SEEK_END);
fileLen = ftell(fp1);
fseek(fp1, 0, SEEK_SET);
// 分配内存空间
buffer = (char *) malloc(fileLen + 1);
if (!buffer) {
printf("内存分配失败\n");
fclose(fp1);
return 1;
}
// 读取文件内容到内存中
fread(buffer, fileLen, 1, fp1);
fclose(fp1);
// 处理文件内容
int i, j, len = fileLen / 3 + fileLen % 3;
char *result = (char *) malloc(len + 1);
for (i = 0, j = 0; i < fileLen; i += 3, j += 4) {
result[j] = buffer[i];
if (i + 1 < fileLen) {
result[j + 1] = buffer[i + 1];
if (i + 2 < fileLen) {
result[j + 2] = buffer[i + 2];
result[j + 3] = '*';
} else {
result[j + 2] = '*';
}
} else {
result[j + 1] = '*';
result[j + 2] = '*';
}
}
result[len] = '\0';
// 输出到控制台和文件
printf("%s\n", result);
fp2 = fopen("jieguo.txt", "w");
if (!fp2) {
printf("无法打开文件 jieguo.txt\n");
free(buffer);
free(result);
return 1;
}
fprintf(fp2, "%s", result);
fclose(fp2);
// 释放内存空间
free(buffer);
free(result);
return 0;
}
```
这段代码使用了指针来读取文件内容,并按照题目要求进行处理后输出到控制台和文件中。具体来说,我们将每三个字符以及它们之间的空隙当作一个单元,在单元内部按照顺序放入字符和星号。当原文件长度不是3的倍数时,需要特别处理最后一个单元,将多余的字符按照题目要求放置。请注意,这段代码可能会因为文件打开失败、内存分配失败等原因导致程序异常退出,需要进行错误处理。