【发布时间】:2017-09-05 23:09:02
【问题描述】:
我想实现我自己的用于教育的字符串实现。为此,我定义了一个名为 string 的结构,如下所示:
struct string {
const char *const data;
const int length;
};
我使用函数来创建这些字符串结构,然后将它们分配给变量。
为了覆盖const int length,我使用了以下技巧:
*(int *) &result.length = // a int
现在我也想写信给const char *const data。
据我所知,第一个const 确保您不能编辑指针指向的项目,第二个const 是您不能将指针指向不同的内存位置。这些是不可变字符串的属性。所以我的问题是:如何像分配给const int length 一样给const char *const data 分配一些东西?
编辑:result 如上图是结构体string的一个实例
【问题讨论】:
-
等等。你为什么要把所有成员都设为
const,然后违反他们的常量? -
为什么不把类型设置为不透明的,这样用户就无法深入到结构内部,因此除了使用您提供的访问功能外无法修改它。当您添加这么多
const限定符时,您会使结构不可修改,从而导致您不得不就 SO 提出问题的可怕后果。你做的不好;你滥用演员表来让它发挥作用的事实表明你做的不好。 -
你可以用
struct string myString = { "this is my string", strlen("this is my string") };初始化你的结构然后你将无法修改它,这就是const的重点... -
*(int *) &result.length = // a int这不是“诡计”,这是可憎的 -
鉴于
*(int *) &result.length = 14;“有效”,*(char **)&result.data = "Do not do this";也应该如此。这是不可救药的讨厌,但它应该工作。
标签: c pointers struct constants