社区
C语言
帖子详情
局部变量问题
asdfg014
2006-09-21 05:06:36
char *Test()
{
char p[20];
memset(p,0,20);
strcpy(p,"123456789" );
return p;
}
void main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
}
这样的程序有问题吗?有什么问题
...全文
250
11
打赏
收藏
局部变量问题
char *Test() { char p[20]; memset(p,0,20); strcpy(p,"123456789" ); return p; } void main() { char *p=Test(); printf("\n-----%s---------\n",p); } 这样的程序有问题吗?有什么问题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ammana_babi
2006-09-22
打赏
举报
回复
char *p = (char *)malloc(sizeof(char)*20);
memset(p, 0, 20);
strcpy(p,"12345667890");
这三句话不就是strdup()函数等同于strdup()函数的调用吗。
唯一的区别是把申请的内存先置0而已。
alphajin
2006-09-22
打赏
举报
回复
我只是把楼主的程序改写一下而已,没有free这个函数,贴错了
lilome
2006-09-22
打赏
举报
回复
free(p) free应该释放多大的内存?
Test函数里面根本就不应该分配20个char的内存
应该分配strlen("12324567891") + 1个char
alphajin
2006-09-22
打赏
举报
回复
char *Test(void)
{
char *p = (char *)malloc(sizeof(char)*20);
memset(p, 0, 20);
strcpy(p,"12345667890");
return p;
}
main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
free(p);//千万别忘记释放所申请的内存吆
}
这样有错嘛?
为什么?
ammana_babi
2006-09-22
打赏
举报
回复
同意楼上的。
不过如果采用strdup()函数的话,容易造成内存泄漏的问题,这是C/C++程序员比较痛苦的一个
问题。
下面是MS给出的strdup()函数的源代码:
char * __cdecl strdup ( const char * string )
{
char *memory;
if (!string)
return(NULL);
if (memory = malloc(strlen(string) + 1))
return(strcpy(memory,string));
return(NULL);
}
这个函数通过malloc函数来申请内存,所申请的内存必须由函数调用者释放。
修改后的代码:
char *Test()
{
char *p;
p = strdup("123456789");
return p;
}
main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
free(p);//千万别忘记释放所申请的内存吆
}
twinsen0398
2006-09-22
打赏
举报
回复
用个局部字符串指针!~用strdup函数!~不要忘记释放最后的指针!~
飞哥
2006-09-21
打赏
举报
回复
看看输出就知道行不行了
指针可以解决
sankt
2006-09-21
打赏
举报
回复
//另外一种解决方案:
char *Test()
{
char *p = new char[20];
memset(p,0,20);
strcpy(p,"123456789" );
return p;
}
void main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
delete []p; //注意释放空间
}
sankt
2006-09-21
打赏
举报
回复
条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
sumjohn
2006-09-21
打赏
举报
回复
有问题
char p[20]是个局部变量
是建立在栈空间里的
在Test运行结束后就消亡了
所以你在main函数里调用时值已经是错误的了
aminconi
2006-09-21
打赏
举报
回复
当然有问题了
char *Test(){}
里的p是临时变量
函数体里分配的空间在执行完函数就被释放了
java面向对象上篇
Java是面向对象的程序设计语言,提供了定义类,成员变量,方法等基本功能,...成员变量和
局部变量
• 隐藏与封装 • 深入理解构造器 • 继承与多态 • 继承与组合 • 初始化块
函数返回
局部变量
问题
一般的来说,函数是可以返回
局部变量
的,但是要注意几种情况。
局部变量
的作用域只在函数内部,在函数返回后,
局部变量
的内存已经释放了。因此,如果函数返回的是
局部变量
的值,不涉及地址,程序不会出错。但是如果...
关于内部类的
问题
: 局部内部类访问外部类的
局部变量
问题
(原理性
问题
)
关于内部类的
问题
: 局部内部类访问外部类的
局部变量
问题
编程时,在线程中使用
局部变量
时候经常编译器会提示:
局部变量
必须声明为final [java] view plain copy package test; public class ThreadTest { ...
c语言全局变量和
局部变量
问题
汇总
1、
局部变量
能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量
可以与全局变量同名,在函数内引用这个变量时,会用到同名的
局部变量
,而不会用到全局变量。对于有些编译器而言,在...
mysql中
局部变量
_MySQL中变量的总结
本文对MySQL中
局部变量
、用户变量、系统变量的理解进行总结。 一、
局部变量
局部变量
由DECLARE语句声明: DECLARE var_name[,...] type [DEFAULT value] 默认值由DEFAULT子句来声明,默认值也可以是一个表达式。...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章