关于char*,char[]
来源: 互联网 发布时间:2015-05-04
本文导语: 一个程序定义了两个char*,str1定义在本函数体内,str2定义在头文件中,已include了, 在本函数体内做如下初始化: char* str1; str1=(char*)malloc(sizeof(char)*40); str2=(char*)malloc(sizeof(char)*40); str1指向的字符串内容经常变动,如: s...
一个程序定义了两个char*,str1定义在本函数体内,str2定义在头文件中,已include了,
在本函数体内做如下初始化:
char* str1;
str1=(char*)malloc(sizeof(char)*40);
str2=(char*)malloc(sizeof(char)*40);
str1指向的字符串内容经常变动,如:
str1="abcd";
然后把值传给str2:
str2=str1;
用str2作为参数传给myfun函数,由该函数处理这个字符串
myfun(str2);----该函数定义在同一个c文件中
free(str2);
这个函数到此结束
上面free(str2)可以,后面如果跟free(str1)出错
为什么?谁能告诉我什么时候free定义初始化过的char*?
那str1什么时候free?
(2)char s[23]
这样的char一定要先用memset初始化吗?
在本函数体内做如下初始化:
char* str1;
str1=(char*)malloc(sizeof(char)*40);
str2=(char*)malloc(sizeof(char)*40);
str1指向的字符串内容经常变动,如:
str1="abcd";
然后把值传给str2:
str2=str1;
用str2作为参数传给myfun函数,由该函数处理这个字符串
myfun(str2);----该函数定义在同一个c文件中
free(str2);
这个函数到此结束
上面free(str2)可以,后面如果跟free(str1)出错
为什么?谁能告诉我什么时候free定义初始化过的char*?
那str1什么时候free?
(2)char s[23]
这样的char一定要先用memset初始化吗?
|
str2=str1 这句让str1和str2指向同一个地址,你free(str2)时已经把那个地址释放了,如果再调用free(str1)等于又释放一次,所以出错
字符串初始化不是必需的,编译也可以通过,但是有些条件下可能会出意想不到的错啊:)
字符串初始化不是必需的,编译也可以通过,但是有些条件下可能会出意想不到的错啊:)
|
str2=str1是将str2指针指向了str1,并不是内容的复制。
你的free(str2)其实是将str1指向的空间释放掉了。
应该用strcpy(str2,str1)才对。
你的free(str2)其实是将str1指向的空间释放掉了。
应该用strcpy(str2,str1)才对。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。