69,335
社区成员
发帖
与我相关
我的任务
分享
char *Ip1=(const char *)malloc(sizeof(char)*16);
char *Ip1="192.168.0.1";
这样为什么有问题,是因为malloc分配的内存是在堆中,而字符串常量是在静态存储区中的缘故吗?如果把代码改成//char *Ip1=(const char *)malloc(sizeof(char)*16);
char *Ip1="192.168.0.1";
这样就可以了,谁帮我解答一下,谢谢!char *Ip1=(const char *)malloc(sizeof(char)*16);
char *Ip1="192.168.0.1";
=右边是const型,左为是非const 型,不可以直接赋值,可以去掉const属性。
再执行到第二行时第一行的堆内存会泄露。
第二种情况是定义一个指向常量存储区字符串的指针,没有问题。char *ip1=(char *)malloc(sizeof(char)*16); //不要用const char*
//char *ip1="192.168.0.1"; //malloc 分配的内存相当于数组, 数组的赋值显然不能这样
sprintf(ip1,"%s", "192.168.0.1");
第二种情况
const char *ip1 = "192.168.0.1"; //字符串的字面值是在只读常量区,要用const char *, 显式的说明这个变量不可改