Я массив выделяется таНос:Как узнать, указывают ли две C-строки на один блок памяти?
char *aStr1 = (char*) malloc (10);
И тогда я заполнил эту память:
strcpy(aStr1, "ABCDEFGHI");
После этого я создал новый указатель aStr2:
char *aStr2 = aStr1 + 5;
И я установил четвертый элемент памяти до '\ 0':
* (aStr1 + 4) = '\ 0';
И, наконец, используя эти два указателя в простой функции:
int checkMem(char *aStr1, char *aStr2);
Эта функция возвращает TRUE (некоторые NONE нулевое значение), если aStr1 и aStr2 указал на один блок памяти, и возвращает ноль в другом случае.
Как я могу реализовать эту функцию? (Я прочитал много linux mans о функции allocs и не нашел никакой информации о такой проблеме).
// Добавлена
мне это нужно сделать что-то вроде этого:
char *aStr1 = (char *) malloc (10);
char *aStr2 = aStr1 + 5;
strcpy(aStr1, "ABCDEFGHI");
*(aStr1 + 4) = '\0';
и чем:
my_strcat(aStr1, aStr2);
Я не обратиться за помощью к реализации my_strcat, но может быть, получить подсказку, как я могу решить ее проблему.
// Обновлено
thanx, для всех. Я решил это.
Без каких-либо функций низкого уровня вы не можете правильно знают, сколько памяти выделяют (может быть, на какой-то платформе или реализации вы можете сделать это:
size_t ptr_size = *((size_t *)ptr - 1);
но, возможно, не для всех это будет правильно).
И решение простое: я создаю локальную копию aSrc2, затем realloc aSrc1 и скопирую aSrc2 в новый aSrc1.
Определите «Блок памяти» в этом контексте. – Sinkingpoint
Если вы просто хотите определить, являются ли две строки сквозными в памяти, сравните адрес нулевого терминатора в одной строке с адресом начала другой строки. – lurker
Дикая догадка, вы хотите знать, можете ли вы назвать 'free' на втором указателе или нет? – Johan