问题引入:设计一个给文档命令的函数
申明:
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 }