说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

传递指针的问题

编辑:说三道四文库 发布时间:2018-07-19 07:32
HTML文档下载 WORD文档下载 PDF文档下载
class IOUtil
{
    public:
        //Judge the file exiting or not
        static bool isFileExist(string filename)
        {
                return isFileExist(filename.c_str());
        }
        
        //Judge the file existing or not
        static bool isFileExist(char c[])
        {
            struct stat stat_file;                
            if(stat(c,&stat_file) == -1)
            {                
                return false;
            }        
            return true;
        }
        
        //Get the file modified time
        //static void getFileModifiedTime(const string filename,struct tm *p_countTime)
        //{
        //    getFileModifiedTime(filename.c_str(),p_countTime);
        //}
        
        struct tm* getFileModifiedTime(char c[],struct tm * p_countTime)
        {
            if(!IOUtil::isFileExist(c))
            {
               cout << "File doesn't existing:" << c << endl;
               exit(0);
            }
            struct stat stat_file;    
            stat(c,&stat_file);
            //cout << stat_file.st_mode << endl;
            //cout << stat_file.st_mtime << endl;       
            p_countTime = localtime(&stat_file.st_mtime);
            cout << p_countTime->tm_year + 1900 << "-" << p_countTime->tm_mon + 1<< "-" << p_countTime->tm_mday << " ";
            cout << p_countTime->tm_hour << ":" << p_countTime->tm_min << endl;             
            return p_countTime;
        }
};


int main(int argc,char* argv[])
{
    if(argc !=2 )
    {
        cout << "Invalid argument" << endl;
        cout << "Usage:" << endl;
        cout << "command filename" << endl;
        exit(0);
    }

    cout << "Starting reading the file info:" << argv[1] << endl;
    if(!IOUtil::isFileExist(argv[1]))
    {
        cout << "File doesn't existing" << endl;
    }
    else
        cout << "Find the file" << endl;
        
    struct tm *p_countTime;
    IOUtil iout;
    p_countTime = iout.getFileModifiedTime(argv[1],p_countTime);
    
    cout << p_countTime->tm_year + 1900 << "-" << p_countTime->tm_mon + 1<< "-" << p_countTime->tm_mday << " ";
    cout << p_countTime->tm_hour << ":" << p_countTime->tm_min << endl;                        


}
struct tm* getFileModifiedTime(char c[],struct tm * p_countTime)
这个方法中,如果不return tm*,改为 void getFileModifiedTime(char c[],struct tm * p_countTime)

则 p_countTime在method完成后,会自动清空

但struct tm *p_countTime我是在main中即method outside定义的,为什么传递给getFileModifiedTime时,在method内部分配的地址会无故消失

现在return一个tm指针,这个指针安全吗?

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘