在C中,将const字符串声明为结构成员的理想方法是什么



我有一个具有成员标题的对象,我想将其视为可变字符串。在本例中,只有当我将数组设置为固定大小时,它才有效,但我正在读取xml,无法决定可预测的长度。我会使用一个字符指针,但我必须免费管理它,否则它将在执行的整个生命周期中存储。我很难决定最好的处理方式。

typedef struct
{
const char title[];
const size_t title_length;
...
}item;

"字符串";在C中并不是一个固定定义的东西。它(通常(是内存中某个char数组中的char字符序列,以NUL字符结尾。具体来说,它可能是一个数组,也可能是指向数组的指针。数组的大小可能与字符串的大小匹配,也可能更大,如果你只有一个指针,就无法判断。如果你想从某个地方读取一个字符串(XML文件?(,你通常希望它不是常量。如果在阅读之前不知道它会有多大,那么通常需要调整数组的大小,因此可能需要动态内存(malloc/realloc(。

所以你通常会有这样的东西:

struct item {
char *title;    /* points at an array that will hold the title */
size_t title_capacity;   /* the size allocated for the `title` array */
...
};

最新更新