我知道之前已经回答了,但我找不到问题 这两个初始化之间有什么区别:
int main()
{
char* pch1;
char* pch2;
pch1 = (char*)malloc(sizeof(char) * 5);
strcpy(pch1, "Text");
pch2 = "Text";
}
答案 0 :(得分:2)
这里有三个主要区别:
pch1
字符串是合法的;修改pch2
字符串是非法的pch1
以避免内存泄漏。为了完整性,请考虑pch3
,其初始化如下:
char tmp[] = "Text";
char *pch3 = tmp;
此pch3
可以像pch1
一样修改,但不需要释放,因为字符串的内容会被复制到自动内存中。
答案 1 :(得分:2)
首先:不要从malloc
转换返回值 - 这是常见的错误来源。 Do I cast the result of malloc?
pch1 = malloc(sizeof(char) * 5);
指定一个指向堆上5个字节的动态分配块的指针。
pch2 = "Text";
理想情况下应该避免使用,因为它会指定一个指向字符串文字的指针。字符串文字在大多数操作系统上是只读的,也是错误的常见来源。如果你这样做,你应该指向const
const char * pch2 = "Text";
答案 2 :(得分:1)
pch1
指向堆
您可以在bounderies中修改
加上必须释放
其他指向静态数据段 您无法修改
答案 3 :(得分:0)