大鸟帮小弟我看看小弟我写的代码哪错了
大鸟帮我看看我写的代码哪错了?#include windows.h#include stdio.hchar* gettime(){char s[11]SYSTE
大鸟帮我看看我写的代码哪错了?
#include <windows.h>
#include <stdio.h>
char* gettime()
{
char s[11];
SYSTEMTIME systm;
GetLocalTime(&systm);
sprintf(s, "%4d-%.2d-%.2d",systm.wYear, systm.wMonth, systm.wDay);
return s; //编译到此处有警告,结果是乱码 要是把S数组设置到1024 还是有警告,但不出现乱码了
}
int main()
{
printf("%s",gettime());
return 0;
}
[解决办法]警告你不能返回局部变量的地址,你的s是个局部变量,在函数运行结束时其空间会被释放,你返回这个地址取值的话会得到一个不确定的东西。改为动态申请的空间就可以了,不过这个空间在调用函数后要自己释放。
char* gettime()
{
char *s = new char[11];
SYSTEMTIME systm;
GetLocalTime(&systm);
sprintf(s, "%4d-%.2d-%.2d",systm.wYear, systm.wMonth, systm.wDay);
return s; //编译到此处有警告,结果是乱码 要是把S数组设置到1024 还是有警告,但不出现乱码了
}
int main()
{
char *p = gettime();
printf("%s",p);
delete []p;
p = NULL;
return 0;
}
[解决办法]返回局部对象和返回地址是不同的,返回局部对象是把值传到函数外的地址
[解决办法]s[]是指局部变量,分配的内存在func()函数结束时就释放了,而char *s是指向一个字符串常量,是一个只读的内存,在编译时就已经赋值了,不能对其地址所指的值进行修改
[解决办法]char *s在func()结束时不会被释放的
[解决办法]你把char s[11];定义成静态的就行了
[解决办法]这个printf("%d",func());会在执行时产生一func返回值类型的临时变量,你返回char*时也是同样但是char*指向的地址是func函数内栈上的局部值。
[解决办法]函数返回局部变量是不行的,可以采用参数指针的方式,或者全局变量的方式都可以
[解决办法]static char s[11];