【发布时间】:2011-12-10 17:21:48
【问题描述】:
所以我最近在查看某人的代码,发现编译器没有抱怨,也没有出现以下任何运行时错误:
const char *p = "I didn't malloc...";
上面的代码有效,但我想知道如何。这就是我认为正在发生的事情。谁能确认一下?
所以“我没有 malloc...”在编译时被静态分配在堆栈上,并将地址传递给指针 p。类似于静态数组的分配方式。我对此有 90% 的把握,但一些确认会有所帮助。
谢谢。
【问题讨论】:
-
你用的是什么编译器?兼容的编译器应该拒绝这个。
-
p的类型应该是char const *,因为那段数据(“通常”)是不可写的,现在大多数编译器都会发出警告。 -
@Dani 不,他们不应该。这是完全正常的标准 C 和 C++。
-
@cnicutar: 字符串字面量应该是
const char *,所以这一行应该是assignment discards qualifiers的错误。 -
@Dani: 不。在 C++03 和之前有从
char const*到char*的自动转换(允许与 C 向后比较)。我认为这在 C++11 中已被弃用。但大多数编译器都会产生警告。