我有一個大字符串,我想使用它的一些片段,但我不想一定要複製它們,所以我想我可以製作一個標記有用塊的開始和長度的結構從大字符串開始,然後創建一個讀取它的函數。字符串的返回子字符串
struct descriptor {
int start;
int length;
};
到目前爲止好,但是當我到寫作,我意識到,我真的不能返回塊而不復制到記憶功能......
char* getSegment(char* string, struct descriptor d) {
char* chunk = malloc(d.length + 1);
strncpy(chunk, string + d.start, d.length);
chunk[d.length] = '\0';
return chunk;
}
所以問題我有分別是:
- 有什麼辦法,我可以返回一條繩子但沒有照搬
- 如果沒有,我該怎麼處理這個內存泄漏,因爲我複製s在堆內存中,我無法控制誰會撥打
getSegment
?
你不能只是返回'字符串+ d.start'?唯一的問題是如果有人寫入內存。其他問題將是空終止符,所以你可能需要通過傳遞新的子字符串 –
來管理它,而不會損壞原始字符串,什麼都不做。你必須將沒有空終止的子字符串複製到其他空格中以終止它。你無法處理泄漏(使用該界面);你必須依靠調用者正確處理分配的內存。你可以定義'char * getSegment(const char * source,struct descriptor d,char * output)',其中調用者在'output'參數中提供的空間必須至少爲d.length + 1'字節的內存。當然,調用者也對該內存負責。 –
@JonathanLeffler什麼是一個適當的接口,被調用者不需要處理內存管理? –