CHAT-GPT初使用
阅读原文时间:2023年08月14日阅读:3

拿chatgpt去试验了一下,一个挺小的需求,但是前后还是更改了三次,体验就是它可以不断改进之前实现的代码,但需要提需求的人比较清楚需求内的细节,差不多类似于,我有想法,它来实现,还是可以提高不少效率的。具体体验如下:

我:请写一段C语言代码,将2M大小的文件填充0xff到30M,要求不能申请超过1K大小的内存?

 CHAT-GPT:这是一个C语言的代码示例,它使用了一个1K的缓冲区来填充文件。请注意,这个代码没有包含错误处理,你可能需要根据你的实际需求来添加。

#include

#define BUFFER_SIZE 1024

void fill_file(const char* filename) {
FILE* file = fopen(filename, "ab");
if (file == NULL) {
printf("无法打开文件\n");
return;
}

char buffer\[BUFFER\_SIZE\];  
for (int i = 0; i < BUFFER\_SIZE; i++) {  
    buffer\[i\] = 0xff;  
}

for (int i = 0; i < (30 \* 1024 \* 1024) / BUFFER\_SIZE; i++) {  
    fwrite(buffer, 1, BUFFER\_SIZE, file);  
}

fclose(file);  

}

int main() {
fill_file("test.txt");
return 0;
}

CHAT-GPT:这段代码首先打开一个文件,然后创建一个1K大小的缓冲区并填充0xff。然后,它将这个缓冲区写入文件,直到文件的大小达到30M。最后,它关闭文件。

我:填充的文件大小存在问题,忽略了原始文件的大小,请修改

CHAT-GPT:对不起,我犯了一个错误。你是对的,我应该在原始文件大小的基础上添加数据,直到文件大小达到30M。以下是修改后的代码:

#include

#define BUFFER_SIZE 1024

void fill_file(const char* filename) {
FILE* file = fopen(filename, "ab");
if (file == NULL) {
printf("无法打开文件\n");
return;
}

char buffer\[BUFFER\_SIZE\];  
for (int i = 0; i < BUFFER\_SIZE; i++) {  
    buffer\[i\] = 0xff;  
}

fseek(file, 0, SEEK\_END);  
long current\_size = ftell(file);

for (int i = 0; i < ((30 \* 1024 \* 1024) - current\_size) / BUFFER\_SIZE; i++) {  
    fwrite(buffer, 1, BUFFER\_SIZE, file);  
}

fclose(file);  

}

int main() {
fill_file("test.txt");
return 0;
}

CHAT-GPT: 这段代码首先打开一个文件,然后创建一个1K大小的缓冲区并填充0xff。然后,它将文件指针移动到文件的末尾,并获取当前的文件大小。然后,它将缓冲区写入文件,直到文件的大小达到30M。最后,它关闭文件。

我:当前填充的方式仍可能会超出目标30M大小,请对数据非1K对齐的情况进行处理,得到刚好30M大小的文件

CHAT-GPT:你是对的,如果文件大小不是1K的倍数,那么最后一次写入可能会使文件大小超过30M。我们可以在最后一次写入时只写入需要的字节数,以确保文件大小正好是30M。以下是修改后的代码:

#include

#define BUFFER_SIZE 1024

void fill_file(const char* filename) {
FILE* file = fopen(filename, "ab");
if (file == NULL) {
printf("无法打开文件\n");
return;
}

char buffer\[BUFFER\_SIZE\];  
for (int i = 0; i < BUFFER\_SIZE; i++) {  
    buffer\[i\] = 0xff;  
}

fseek(file, 0, SEEK\_END);  
long current\_size = ftell(file);  
long target\_size = 30 \* 1024 \* 1024;  
long remaining = target\_size - current\_size;

while (remaining > 0) {  
    int write\_size = remaining > BUFFER\_SIZE ? BUFFER\_SIZE : remaining;  
    fwrite(buffer, 1, write\_size, file);  
    remaining -= write\_size;  
}

fclose(file);  

}

int main() {
fill_file("test.txt");
return 0;
}

CHAT-GPT:这段代码首先打开一个文件,然后创建一个1K大小的缓冲区并填充0xff。然后,它将文件指针移动到文件的末尾,并获取当前的文件大小。然后,它将缓冲区写入文件,直到文件的大小达到30M。在最后一次写入时,它只写入需要的字节数,以确保文件大小正好是30M。最后,它关闭文件。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章