繁体   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