(資料圖片)
拿chatgpt去試驗了一下,一個(gè)挺小的需求,但是前后還是更改了三次,體驗就是它可以不斷改進(jìn)之前實(shí)現的代碼,但需要提需求的人比較清楚需求內的細節,差不多類(lèi)似于,我有想法,它來(lái)實(shí)現,還是可以提高不少效率的。具體體驗如下:
我:請寫(xiě)一段C語(yǔ)言代碼,將2M大小的文件填充0xff到30M,要求不能申請超過(guò)1K大小的內存?
CHAT-GPT:這是一個(gè)C語(yǔ)言的代碼示例,它使用了一個(gè)1K的緩沖區來(lái)填充文件。請注意,這個(gè)代碼沒(méi)有包含錯誤處理,你可能需要根據你的實(shí)際需求來(lái)添加。#include#define BUFFER_SIZE 1024void fill_file(const char* filename) { FILE* file = fopen(filename, "ab"); if (file == NULL) { printf("無(wú)法打開(kāi)文件\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:這段代碼首先打開(kāi)一個(gè)文件,然后創(chuàng )建一個(gè)1K大小的緩沖區并填充0xff。然后,它將這個(gè)緩沖區寫(xiě)入文件,直到文件的大小達到30M。最后,它關(guān)閉文件。
我:填充的文件大小存在問(wèn)題,忽略了原始文件的大小,請修改
CHAT-GPT:對不起,我犯了一個(gè)錯誤。你是對的,我應該在原始文件大小的基礎上添加數據,直到文件大小達到30M。以下是修改后的代碼:
#include#define BUFFER_SIZE 1024void fill_file(const char* filename) { FILE* file = fopen(filename, "ab"); if (file == NULL) { printf("無(wú)法打開(kāi)文件\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:這段代碼首先打開(kāi)一個(gè)文件,然后創(chuàng )建一個(gè)1K大小的緩沖區并填充0xff。然后,它將文件指針移動(dòng)到文件的末尾,并獲取當前的文件大小。然后,它將緩沖區寫(xiě)入文件,直到文件的大小達到30M。最后,它關(guān)閉文件。
我:當前填充的方式仍可能會(huì )超出目標30M大小,請對數據非1K對齊的情況進(jìn)行處理,得到剛好30M大小的文件CHAT-GPT:你是對的,如果文件大小不是1K的倍數,那么最后一次寫(xiě)入可能會(huì )使文件大小超過(guò)30M。我們可以在最后一次寫(xiě)入時(shí)只寫(xiě)入需要的字節數,以確保文件大小正好是30M。以下是修改后的代碼:#include#define BUFFER_SIZE 1024void fill_file(const char* filename) { FILE* file = fopen(filename, "ab"); if (file == NULL) { printf("無(wú)法打開(kāi)文件\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:這段代碼首先打開(kāi)一個(gè)文件,然后創(chuàng )建一個(gè)1K大小的緩沖區并填充0xff。然后,它將文件指針移動(dòng)到文件的末尾,并獲取當前的文件大小。然后,它將緩沖區寫(xiě)入文件,直到文件的大小達到30M。在最后一次寫(xiě)入時(shí),它只寫(xiě)入需要的字節數,以確保文件大小正好是30M。最后,它關(guān)閉文件。
標簽: