[英]String handling in ANSI C (Memory Allocation)
我可以為char *變量分配一個字符串,而不必事先分配內存怎么辦?
例如,如果我有一個函數,返回一個char *(例如文件路徑),我將以這種方式調用該函數。
char* path;
path = get_path();
如果我不知道路徑的長度是多少,我怎么能期望char *表現出來?在將路徑分配給“ Path”之前,是否有必要嚴格分配路徑的大小?
在您的代碼中:
char* path;
path = get_path();
get_path
返回一個指向字符串(或等效於字符串的地址)的指針。 (指向字符串的指針是指向其第一個字符的指針)。 分配只是復制該指針值,並將其存儲在path
。
get_path
函數本身必須已分配空間以某種方式容納字符串。
有幾種方法可以做到這一點。 有些使調用者有責任在不再需要空間時對其進行分配。
推薦閱讀: comp.lang.c FAQ ,特別是第4節(指針),第6節(數組和指針),第7節(內存分配)和第8節(字符和字符串)。
在這種情況下, get_path()
函數將返回一個指向其自身的內存緩沖區的指針。 現在的問題是,誰分配了該內存,誰負責釋放它?
char *path;//path is just a pointer
如果您在get_path()中為路徑字符串分配內存,則只是使指針(char * path)指向該內存。
在get_path
您必須將指針返回到已分配的變量。 像這樣:
char *get_path()
{
char *var = (char*)malloc(sizeof(char)*n);
setdirectory(var);
return var;
}
其中n
是目錄的大小。
但是,由於您說的不是目錄的大小,因此您可以獲取目錄的名稱,計算單詞數,分配另外的內存量(當時精確的數量)並釋放另一個。 這將幫助您使用內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.