【发布时间】:2019-06-10 11:23:54
【问题描述】:
我知道很多人都问过这个问题,但我仍然对此有一些疑问。 我读了那篇文章:
char *string = "mystring";
如果我想这样做,让它成为一个只读的字符数组:
string[0] = 'l';
我会得到一个错误。 当我写的时候:
char string[] = "mystring";
它保存在堆栈中,就在当前范围内。 char* 呢?它保存在堆上吗?还是在堆栈上?
当我尝试写作时:
char *string = "mystring";
然后:
string = "mystring2";
它起作用了,但是旧的“mystring”数组发生了什么?这样做会导致内存泄漏吗?
【问题讨论】:
-
"我会得到一个错误。" - 严格来说,你可能会,你可能不会;它是未定义的。您遇到的任何运行时错误都归结为操作系统或目标平台行为,而不是 C 运行时行为。最好通过
const char *string = "mystring";获得编译时错误。