簡體   English   中英

使用命令行參數在C程序中創建多個文件

[英]Create Multiple Files in C program using command line arguments

我正在嘗試創建一個C程序,其中包含50行的text.txt文件。 此text.txt文件應分為5個文件,如text_part1.txt,text_part2.txt等。 text.txt文件中的50行應同等地復制到5個文件中的10行。

所有這些必須通過使用命令行參數來完成。 我是C的初學者,剛剛開始編碼。 我不知道如何使用命令行參數。

#include <stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
 FILE *ptr_readfile;
 FILE *ptr_writefile;
 char line [100]; 
 char fileoutputname[10];
 int filecounter=1, linecounter=1;

 ptr_readfile = fopen("C:/home/dir/sample_pg/data/text.txt","r");
 if (!ptr_readfile)
 return 1;

 sprintf(fileoutputname, "file_part%d", filecounter);
 ptr_writefile = fopen(fileoutputname, "w");

 while (fgets(line, sizeof line, ptr_readfile)!=NULL) 
 {
    if (linecounter == 5)
        {
        fclose(ptr_writefile);
        linecounter = 1;
        filecounter++;
        sprintf(fileoutputname, "file_part%d", filecounter);
        ptr_writefile = fopen(fileoutputname, "w");
        if (!ptr_writefile)
            return 1;
        }
    fprintf(ptr_writefile,"%s\n", line);
    linecounter++;
 }
 fclose(ptr_readfile);
 return 0;
 }

要獲取程序的參數,需要使用參數計數(通常命名為argc )和參數數組(通常命名為argv )來定義main函數,因此需要

int main(int argc, char**argv) {
  for (int ix=1; ix<argc; ix++) {
     FILE* fil = fopen(argv[ix], "r");
     if (!fil) { perror(argv[ix]); exit(EXIT_FAILURE); };

當你將這個(帶有一些其他需要的代碼)編譯成可執行文件foo.exe並在終端上運行foo.exe abc時, argc是4並且你有

      argc == 4 &&
      strcmp(argv[0], "foo.exe") == 0 &&
      strcmp(argv[1], "a") == 0 &&
      strcmp(argv[2], "b") == 0 &&
      strcmp(argv[3], "c") == 0 &&
      argv[4] == NULL

請注意,在fopen之類的函數失敗時調用perror是一個好習慣

順便說一下,你忘了在你的程序中調用fclose 您也可以了解更多關於fflush 你應該更喜歡snprintfsprintf以避免緩沖區溢出 了解有關未定義行為的更多信息,並對此非常害怕。

請習慣使用所有警告和調試信息進行編譯(例如gcc -Wall -Wextra -g如果使用GCC ....),然后學習如何使用調試器。

閱讀perror(3)fopen(3)fclose(3)fflush(3)snprintf(3)並習慣閱讀你想要使用的每個函數的文檔

另見csplit ; 你可以通過研究在Linux上實現它的免費軟件包coreutils的源代碼來獲得一些靈感。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM