#include<stdio.h> #include<time.h> #include<stdlib.h> #include<sys/stat.h> #define CHOICE 2 #define FILEPATH "/root/date.c" char global_buffer[120]; //NO.1 使用全局声明的数组 #if CHOICE == 1 char *local_time(char* filename) { struct tm *tm_ptr; struct stat stat_block; stat(filename , &stat_block); tm_ptr = localtime(&stat_block.st_mtime); strftime(global_buffer, sizeof(global_buffer), "%a %b %e %T %Y",tm_ptr); printf("using global array!\n"); return global_buffer; } /* NO.2 显式分配一些内存,保存返回的值*/ #elif CHOICE == 2 char *local_time(char* filename) { struct tm *tm_ptr; struct stat stat_block; char *buffer = (char*)malloc(120); stat(filename , &stat_block); tm_ptr = localtime(&stat_block.st_mtime); strftime(buffer, 120, "%a %b %e %T %Y",tm_ptr); printf("using malloc memory!\n"); return buffer; } //No.3 使用静态数组 #else char *local_time(char* filename) { struct tm *tm_ptr; struct stat stat_block; static char buffer[120]; stat(filename , &stat_block); tm_ptr = localtime(&stat_block.st_mtime); strftime(buffer, sizeof(buffer), "%a %b %e %T %Y",tm_ptr); printf("using static array!\n"); return buffer; } #endif int main() { char *s = FILEPATH; #if CHOICE == 1 //char *ptr = (char *) malloc(120); char *p = local_time(s); printf("%s\n",p); #elif CHOICE == 2 char *p = local_time(s); printf("%s\n",p); //free(p); #else char *p = local_time(s); printf("%s\n",p); #endif }
C专家编程之编译器日期被破坏程序,布布扣,bubuko.com
原文:http://blog.csdn.net/yuesichiu/article/details/38347233