在我的程序中,我將一個保存配置文件位置的字符數組取出來,它應該是這樣的: 「/home/user/.config」當我知道字符數組的最大尺寸時使用malloc
現在我明白最長的用戶名可以是32字節長(GNU Linux),所以我知道該數組不會超過46個字符,在這種情況下,我應該使用malloc或不。
我應該使用:
char config_file_location[46];
strcpy (config_file_location, getenv("HOME"));
strcat(config_file_location,"/.config");
或:
char *config_file_location;
config_file_location = (char *) malloc(43);
strcpy (config_file_location, getenv("HOME"));
strcat(config_file_location,"/.config");
//code goes here
free(config_file_location);
也應該我在上面的例子中使用的realloc獲得準確使用它應該的內存量的config_file_location?
我正在尋找最佳實踐信息,如果它不值得在這種情況下做,我想知道它什麼時候會,而且我想知道背後哪種方法更好。
謝謝,我很感激。
你確定主目錄的形式始終是'/ home/username'嗎?不要做出這樣的假設。例如,我的主目錄位於'/ export/home/fuz'中,並且我的主目錄是'/ pub/homesrv/department/home/username'。 – fuz
如果你有一個數組,你不必擔心內存泄漏,如果你有一個動態分配的緩衝區,你就不必擔心它會變小。 –
你「知道」最長的config_file_location是46個字符......當你的代碼崩潰時,記住一個最重要的調試規則:你知道什麼是錯誤的。正如@FUZxxl已經告訴你的那樣。 – gnasher729