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

大鸟帮小弟我看看小弟我写的代码哪错了

2013-03-25 
大鸟帮我看看我写的代码哪错了?#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;
}

[解决办法]
返回局部对象和返回地址是不同的,返回局部对象是把值传到函数外的地址
[解决办法]
引用:

char s[] = "adadadsadsafasdasdas";   警告 有错误
        //char *s = "asfasfasfasfassf";     换成这句就对  这是为什么?

返回这两个值 有什么区别

s[]是指局部变量,分配的内存在func()函数结束时就释放了,而char *s是指向一个字符串常量,是一个只读的内存,在编译时就已经赋值了,不能对其地址所指的值进行修改
[解决办法]
char *s在func()结束时不会被释放的
[解决办法]
你把char s[11];定义成静态的就行了
[解决办法]
引用:
胖蛋他爹:你说的很有道理 但是
#include <stdio.h>

int func()
{
int temp = 6;// 返回局部自动变量的值
return temp;
}


int main()
{
printf("%d",func());
    
}
这样怎么编译器不提示警告  而且打印值是正确的


这个printf("%d",func());会在执行时产生一func返回值类型的临时变量,你返回char*时也是同样但是char*指向的地址是func函数内栈上的局部值。
[解决办法]
函数返回局部变量是不行的,可以采用参数指针的方式,或者全局变量的方式都可以
[解决办法]
static    char s[11];   

热点排行