C專家編程之編譯器日期被破壞程序
#include
#include
#include
#include
#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
}