我知道const char *
是一个指向const char的指针,而char *const
是一个指向char的常量指针。 我在下面的代码测试此:修改char * const字符串
const char *s = "hello"; // Not permitted to modify the string "hello"
char *const t = "world"; // Not permitted to modify the pointer t
s = "hello2"; // Valid
// t = "world2"; // Invalid, gives compilation error
// *(s + 1) = 'a'; // Invalid, gives compilation error
*(t + 1) = 'a'; // Why does this not work?
最后一行不给任何错误,但导致程序意外终止。为什么修改t
指向的字符串不允许?
你说出了标准,但你并没有真正说出为什么(程序如何)会因为错误而终止......只是说... Elchonon Edelson给出了实际的原因,我认为这是正确的答案。 –
@AlexisWilke该标准意味着与平台无关,这些细节依赖于平台,这就是为什么标准使用诸如未定义行为之类的语言来涵盖整个范围的行为,包括正常工作但不能依赖的行为。我为典型的现代unix平台添加了更多细节。 –