有一处不解,望大家解释上
有一处不解,望大家解释下C/C++ code#include stdio.h#include stdlib.hint mian (){char tmpname[L_tm
有一处不解,望大家解释下
C/C++ code#include <stdio.h>#include <stdlib.h>int mian (){ char tmpname[L_tmpnam]; char *filename ; FILE *tmpfp; filename = tmpnam( tmpname ); printf( "%s\n" , filename ); tmpfp = tmpfile(); if(tmpfp) printf("Opened a temporary file OK\n"); else perror("tmpfile"); exit(0);}
这是《linux程序设计》上的一个例子
其中这一句
C/C++ codechar * filename ;
只是在栈上面声明一个filename,即指向了一个字符的指针,并没有在堆上开辟空间,也没有定义成一定长度的数组
而
C/C++ codefilename = tmpnam( tmpname );
返回的却是字符串,那么filename这个字符的后面的栈已经被写如了内容怎么办?或者写好了后被其他操作覆盖掉怎么办?
[解决办法]以下个人理解:
tmpfile:返回char *,作用是产生一个唯一的文件名,创建一个临时文件,保存一些数据,以后再用,在程序退出时这些文件会自动删除。
filename = tmpnam( tmpname );产生的文件名存到tmpname和filename中,他们两个指向同一块内存。在程序结束时栈会销毁,临时文件也会自动删除。
[解决办法][解决办法]有些不会销毁的吧,要看分配在栈上,还是堆上。比如 new过来的就不会销毁。
char s[] = "abc",这个会销毁。
char *s = "abc" ,这个不会,把s赋给filename是可行的