簡體   English   中英

ANSI C(內存分配)中的字符串處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM