一个C语言的错误:临时变量出栈以后不可预知

问题引入:设计一个给文档命令的函数

申明:

void ReportName_Logic(char *Title);

char *ReportName=NULL;

调用:

ReportName_Logic(ReportName);//此时我以为跑完以后ReportName就取好名字了。

实现:

void ReportName_Logic(char *Title)
{
u8 rval=0;
DIR SDdir;
FILINFO SDinfo;
  char name[50]={0};
char newname[50]={0};
if(Check_Dir_Exist("0:","TMReport"))//扫描路径下的文件+子文件夹
{ //已经存在 啥也不做
printf("HAVE DIR");
}
else
{//不存在 创建文件夹
 mf_mkdir("TMReport");
  printf("HAVE NO DIR");
}
//切换文件夹 没意义
f_chdir("0:/TMReport");

//目录下找是否有文件
rval=Check_Dir_Exist_EXT((u8*)"0:/TMReport","Report",name);
if(rval)
{
 printf("HAVE TXT");
  sprintf(newname,"%s_%s","New",name) ;
}
else
{
printf("HAVE NO TXT");
strcpy(newname,"Report.txt");
}

Title=newname;//名字取好了  出栈也不会变化?
}

 周五写完以后,我周末突然想起来有点问题,我这个char*虽然不是返回值,而是通过参数传进去的。

但是函数出栈以后会发生什么呢?

下面测试一下,用ubentu

  1 #include<stdio.h>
  2 #include<string.h>
  3 char *name=0;
  4 //char name[10]={0};
  5 void fun(void )
  6 {
  7 //char *string="hello\n";
  8 char string[10]="hello\n";
  9 name=string;
 10 //strcpy(name,string);
 11 printf("fun---%s\n",name);
 12 }
 13 
 14 int main()
 15 {
 16 fun();
 17 
 18 printf("main---%s\n",name);
 19 
 20 }
~      

问题十分显著!就是有问题!

怎么修改?暂时的想法就是数组搞成static那样就不会销毁了。

8 static char string[10]="hello\n";  --这样修改就好了 以前还研究过static的问题,gprs分析报文的时候有微博。

顺便说说其他知识点

https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651288610&idx=1&sn=6b96a26eec3af39ee9d1a918e92753c2&mpshare=1&scene=23&srcid=06126rWAu70C9HNYIT180wG7#rd


1可以直接写 指针=数组 比如现在就是   {也可以指针=指针 比如char *string="hello\n";}

 name=string;

2指针的时候不能stecpy 会发生段错误 因为后者复制到前者的时候 需要前者有内存 你现在是指针 没有可写内存 直接失败


3该指针为数组就没问题了。

  1 #include<stdio.h>
  2 #include<string.h>
  3 char name[10]={0};
  4 void fun(void )
  5 {
  6 char *string="hello\n";
  7 //static char string[10]="hello\n";
  8 strcpy(name,string);
  9 printf("fun---%s\n",name);
 10 }
 11 
 12 int main()
 13 {
 14 fun();
 15 
 16 printf("main---%s\n",name);
 17 
 18 }

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/80651456