簡體   English   中英

如何知道兩個C字符串是否指向一個內存塊?

[英]How to know if two C-strings point to one memory block?

我有一個分配了malloc的數組:

char *aStr1 = (char* ) malloc (10);

然后我填滿了這段記憶:

strcpy(aStr1, "ABCDEFGHI");

之后,我創建了一個新的指針aStr2:

char *aStr2 = aStr1 + 5;

我將內存的第四個元素設置為“ \\ 0”:

*(aStr1 + 4)='\\ 0';

最后,在一個簡單的函數中使用以下兩個指針:

int checkMem(char *aStr1, char *aStr2);

如果aStr1和aStr2指向一個內存塊,則此函數返回true(有些零)。在另一情況下,該函數返回零。

我如何實現此功能? (我讀過許多關於allocs函數的Linux芒書,但尚未找到有關此類問題的任何信息)。

//添加

我需要這樣做:

char *aStr1 = (char *) malloc (10);
char *aStr2 = aStr1 + 5;
strcpy(aStr1, "ABCDEFGHI");
*(aStr1 + 4) = '\0';

然后:

my_strcat(aStr1, aStr2);

我不尋求幫助來實現my_strcat,但也許可以得到一些提示,說明我如何解決其問題

//更新

感謝所有人。 我解決了

沒有任何底層函數,您將無法正確知道多少內存分配(也許在某些平台或實現上,您可以這樣做:

size_t ptr_size = *((size_t *)ptr - 1);

但可能並非全部正確)。

解決方法很簡單:我創建aSrc2的本地副本,然后重新分配aSrc1並將aSrc2復制到新的aSrc1。

不幸的是,您無法確定兩個指針是否指向屬於同一初始分配的內存。

您可以創建類/結構,例如,保存初始分配,然后可以對其進行比較。

但是,如果沒有附加信息,您將無法分辨。

沒有提供執行此操作的標准機制,它由您來跟蹤收到的內存以及這些分配的大小,因此您可能希望提供自己的malloc包裝器來跟蹤分配的內容。 將指針存儲在映射中,以便您可以使用lower_bound查找與第一個字符串最近的分配,然后檢查第二個字符串是否在同一分配中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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