Я писал функцию, которая объединяет строки, когда обнаружил проблему во втором аргументе.Вот упрощенная версия моей функции
struct c_class* _Append_s(void* self, const char* str,const DWord length) // DWord is unsigned int
{
struct c_class* this = self;
this->inStr = realloc(this->inStr, length + this->len);
#pragma warning(disable:4996)
strcpy(this->inStr + this->len, str); // MSVC does an annoying warnings C4996
#pragma warning(default:4996)
this->len += length;
return this;
}
эта функция принимает struct c_class*
в качестве входного аргумента (void* self
), string
для добавления и его length
в байтах и возвращает указатель структуры (это сделано для последовательных вызовов) struct c_class сама содержит char * inStr и длину строки.Но это не так.
В качестве входных данных _Append_s может принимать обычные константные строки char* in = "some text"
, массивы символов - char in[10]
, но также и выделенные строки char* inm = malloc(n)
.
Итаквопросы:
1) можно ли как-то отследить, какие строки выделены, и освободить их после объединения?Лучше было бы без дополнительного ввода, потому что это внутренняя функция, и я вызываю ее из упаковщиков типов int и char *.
2) возможно, есть способ преобразовать выделенную строку в выражение строки const и освободитьпамять потом?
Если второе возможно, первый вопрос устарел, потому что он решает проблему, где мне нужно получить законченную строку и освободить память, которая struct c_class*
занимает