首先,如果这是一个幼稚的问题,请原谅我;我只是一个尝试学习的初学者。
我知道:
char* a = "CD";
将字符串存储在只读内存中;因此无法对字符串进行任何更改。 (常量)
但我确实知道在使用 malloc 时也是如此;
char* a = malloc(3*sizeof(char)) ;
a = "CD" ;
a[0] = 'S' ; // even regular a = "MR"; does not work
我很困惑,我以为这是存储在堆中...
为什么我不能修改字符串?
最佳答案
a = "CD";
和 char* a = "CD";
做同样的事情:它存储 "CD"
到 a
。调用 malloc
返回的值被覆盖,分配的内存被泄漏。
正确的做法是复制字符串:
strcpy(a, "CD");
关于c - malloc 是否生成字符串常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54854799/