⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filecat.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/*** FILECAT.C - Adds one file onto another vertically, as with a column** block in QEdit.**** Must be compiled in Compact or Large memory models to use larger** files.**** Public Domain by Chad Wallace, 1996*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "filecat.h"#ifndef FALSE#define FALSE 0#define TRUE 1#endif/*** filecat() error codes*/enum {      FC_SUCCESS = 0,         /* Success */      FC_RDEST,               /* Error reading dest file */      FC_WDEST,               /* Error writing dest file */      FC_SRC,                 /* Error with src file */      FC_MEM,                 /* Out of memory */      FC_LINES,               /* Too many lines (increase max_lines) */      FC_LINE                 /* Line too long (increase line_max) */};/*** These are global to save overhead when calling cleanup function*/static char ** str_arr;static char * temp_str;/*** Frees all allocated memory and closes specified file*/static void cleanup(int tot_lines, FILE * fp){      if (str_arr)      {            for ( ; tot_lines >= 0; tot_lines--)                  free(str_arr[tot_lines]);            free(str_arr);      }      if (temp_str)            free(temp_str);      if (fp)            fclose(fp);}int filecat(char * dest_file, char * src_file, int line_max, int max_lines){      int i, tot_lines;      unsigned int lines_len;      FILE * fp;      if ((temp_str = malloc(line_max + 1)) == NULL)            return FC_MEM;      /* Allocate memory for pointers to line strings */      if ((str_arr = calloc(max_lines + 1, sizeof(char *))) == NULL)      {            free(temp_str);            return FC_MEM;      }      /* Open destination file */      if ((fp = fopen(dest_file, "rt")) == NULL)      {            free(temp_str);            free(str_arr);            return FC_RDEST;      }      /* Read destination file into string array line-by-line */      for (i = 0;           (fgets(temp_str, line_max + 1, fp) != NULL) && (i <= max_lines);           i++)      {            /* Strip trailing newline from line read */            if (temp_str[strlen(temp_str) - 1] == '\n')                  temp_str[strlen(temp_str) - 1] = '\0';            /* Allocate memory */            if ((str_arr[i] = malloc(line_max + 1)) == NULL)            {                  /* Clean up and return memory error */                  cleanup(i, fp);                  return FC_MEM;            }            /* Copy the string to its new home */            strcpy(str_arr[i], temp_str);      }      fclose(fp);      if (i > max_lines)      {            /* Clean up and return too many lines error */            cleanup(i, NULL);            return FC_LINES;      }      /* Get length of longest line */      lines_len = max_line(str_arr);      /* Open source file */      if ((fp = fopen(src_file, "rt")) == NULL)      {            /* Clean up and return source file error */            cleanup(i, NULL);            return FC_SRC;      }      tot_lines = i;      /*      ** Get each line from src file and append to corresponding line from      ** dest file      */      for (i = 0;           (fgets(temp_str, line_max + 1, fp) != NULL) && (i < max_lines);           i++)      {            int j;            /* Has this line been allocated yet? */            if (str_arr[i] == NULL)            {                  /* Allocate memory */                  if ((str_arr[i] = malloc(line_max + 1)) == NULL)                  {                        /* Clean up and return memory error */                        cleanup(tot_lines, fp);                        return FC_MEM;                  }                  /* Initialize string */                  str_arr[i][0] = '\0';                  tot_lines++;            }            /* Pad with spaces to make this line as long as longest */            for (j = strlen(str_arr[i]); j < lines_len; j++)                  str_arr[i][j] = ' ';            str_arr[i][j] = '\0';            /* Check size of resulting line when strcat'd */            if (lines_len + strlen(temp_str) > line_max)            {                  cleanup(tot_lines, fp);                  return FC_LINE;            }            strcat(str_arr[i], temp_str);      }      fclose(fp);      if (i > max_lines)      {            /* Clean up and return too many lines error */            cleanup(i, NULL);            return FC_LINES;      }      /* Open dest file again, to write this time */      if ((fp = fopen(dest_file, "wt")) == NULL)      {            /* Clean up and return source file error */            cleanup(i, NULL);            return FC_WDEST;      }      for (i = 0; i < tot_lines; i++)      {            if ((fputs(str_arr[i], fp) == EOF) /*|| (fputc('\n', fp) == EOF)*/)            {                  cleanup(i, fp);                  return FC_WDEST;            }      }      cleanup(i, fp);      return FC_SUCCESS;}int main(int argc, char ** argv){      printf("Filecat returned %d\n", filecat(argv[1], argv[2], 2048, 4096));      return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -