C 内存分配-下面的结构是一个简单的解决方法吗?

C 内存分配-下面的结构是一个简单的解决方法吗?,c,string,pointers,memory-management,struct,C,String,Pointers,Memory Management,Struct,我目前正在C中运行我自己的split、trim和其他实用程序字符串函数。 在四处搜索时,我确定像strdup()这样的函数是 一般,被认为是邪恶的,因为它分配内存(与其他字符串函数不同) 来自同一个库) 然而,似乎不可避免的是,我的函数可以这样编写:它们不分配内存。我正在尽力解决这个问题。目前,我已经留下了所有的输入 字符串(const),并返回指向新字符串的指针,并记录 以后必须免费返回 我在考虑是否有更好的方法,这个想法让我印象深刻。我想知道这到底是个好主意还是个幼稚的主意。这就是我的问题,

我目前正在C中运行我自己的split、trim和其他实用程序字符串函数。 在四处搜索时,我确定像
strdup()
这样的函数是 一般,被认为是邪恶的,因为它分配内存(与其他字符串函数不同) 来自同一个库)

然而,似乎不可避免的是,我的函数可以这样编写:它们不分配内存。我正在尽力解决这个问题。目前,我已经留下了所有的输入 字符串(const),并返回指向新字符串的指针,并记录 以后必须免费返回

我在考虑是否有更好的方法,这个想法让我印象深刻。我想知道这到底是个好主意还是个幼稚的主意。这就是我的问题,那就是 以下解决方案是否可行?如果没有,为什么

我的想法是,我将创建如下结构:

typedef struct string {
    char *str;
    bool initialized;
} string;
在我所有的字符串操作工作中都使用它。在所有相关函数的末尾 在return语句之前,我将调用另一个函数,让我们对输入字符串(不是char指针而是前面提到的结构)调用它
destroy
。该函数将依次检查布尔值,
ìinitialized
,表示 内存已分配,如果已分配,则随后释放内存

typedef struct string {
    char *str;
    bool initialized;
} string;
该函数将依次检查布尔值,
ìinitialized
,这表示内存已分配,如果已分配,则随后释放内存

typedef struct string {
    char *str;
    bool initialized;
} string;

这样做不需要结构。使用空指针初始化您可能希望使用结构的任何
char*
指针,您可以将其传递给
free()
realloc()
,而不必怀疑是否已进一步分配它。

如果从字符串函数的计算中,您感觉到
strdup()
被认为是邪恶的,你一直在做一个奇怪的评估。
strdup()
没有
strcpy()那么邪恶。
strcpy()
的问题在于它很容易覆盖未分配的内存(从而损坏堆栈并允许在软件中利用漏洞)。人们不喜欢
strdup()
,因为它打破了
malloc
-
free
模式,但并不被认为是邪恶的。但是您需要分配字符串,因为您不知道所需字符串的长度。而且,你真的不需要为这些烦恼。只需将字符串设置为
NULL
。。。这确保了像
free
realloc
这样的东西忽略它,并且它比你的结构简单得多。我真的不明白你担心的是什么。请您添加一个代码示例,说明您试图用结构解决的问题,然后如何使用它来保存指向字符串常量的指针?