69,371
社区成员
发帖
与我相关
我的任务
分享
void Get_Latest_File_Name(char **p,int len){
char capBuf[128] = {0};
FILE *fp;
sprintf(capBuf,"tail -n1 /home/lei/mnt/leileilei |awk '{print $2}'");
fp = popen(capBuf, "r");
fgets(*p, len, fp);
pclose(fp);
}
int main() {
char Buf[256];
char *pBuf=(char *)Buf;
Get_Latest_File_Name(&pBuf,256);
printf("%s\n",pBuf);
return 0;
}
char tabBuf[128] = {0};
void Get_Latest_File_Name(char* p)
{
char capBuf[128] = {0};
FILE *fp = NULL;
sprintf(capBuf,"tail -n1 %s | awk '{print $2}'" MD5FILE);
fp = popen(capBuf, "r");
while(fgets(p, 34, fp)!=NULL){
}
pclose(fp);
}
Get_Latest_File_Name(tabBuf); //结果在tabBuf中
char* Get_Latest_File_Name() {
char capBuf[128] = { 0 };
char *tabBuf = new char[128];
FILE *fp = NULL;
sprintf(capBuf, "tail -n1 %s |awk '{print $2}'" MD5FILE);
fp = popen(capBuf, "r");
while (fgets(tabBuf, 34, fp) != NULL) {
}
pclose(fp);
return tabBuf;
}
改成这样就OK了,记得用完delete这个内存
char* Get_Latest_File_Name()
{
char capBuf[128] = {0};
static char tabBuf[128] = {0};
FILE *fp = NULL;
sprintf(capBuf,"tail -n1 %s | awk '{print $2}'" MD5FILE);
fp = popen(capBuf, "r");
while(fgets(tabBuf, 34, fp)!=NULL){
}
pclose(fp);
return tabBuf;
}
加static是为了影响tabBuf的生命周期,因为加了static之后,tabBuf是静态数组,在数据段上申请空间(而不是在栈上),返回栈上的空间是未定义行为;
也可以定义成指针,但是必须在堆上申请空间,因为堆上的空间生命周期也是从申请开始知道释放结束;即调用malloc和free函数(C++中也可以用new/delete)
使用完之后需要free,在该函数外释放;一般很容易忘释放;
使用static和堆上申请空间两种方法都是可以实现你的需求;但是也是有区别的;