首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strcpy,该如何处理

2012-11-10 
strcpychar *getDay(int idx){// static char buf[20]char buf[20]strcpy(buf,msg[idx])return buf}in

strcpy
char *getDay(int idx)
{
  // static char buf[20];
char buf[20];
strcpy(buf,msg[idx]);
return buf;
}

int _tmain(int argc, _TCHAR* argv[])
{

printf("%s--%s\n",getDay(0),getDay(1));
printf("%s\n",getDay(1));

system("pause");
return 0;
}

这样打印出来时:
sunday--ay
monday
1. 为什么第一行后面个字没有打印完整?
当将上面char buf[20];改成static char buf[20];的时候打印出来时:
sunday--sunday
monday
为什么现在又完整了,而且两个都是sunday?
请教

[解决办法]
局部变量,函数返回后,已经不可用,要这样改:

C/C++ code
char* getDay(int idx){    char* buf = (char*)malloc(sizeof(char) * 20);    strcpy(buf, msg[idx]);    return buf;}
[解决办法]
char buf[20];-----是临时局部变量,函数退出之后,栈里的数据会被销毁
static char buf[20];---静态变量,函数退出之后,仍存在。。
[解决办法]
探讨

引用:

1、char buf是函数里的局部变量。第一次执行getDay(1),buf是"monday"。第二次执行getDay(0)的时候,buf的地址变化了,在赋值"sunday"的同时,把之前的buf覆盖掉了,只剩下“ay”。
2、static char buf变成静态的,只初始化一次。buf地址不变,因为执行顺序是getDay(1)、getDay(0),所以两个都……

热点排行