使用命令行参数在C程序中创建多个文件

时间:2015-06-25 04:12:27

标签: c file command-line-arguments

我正在尝试创建一个包含50行的text.txt文件的C程序。此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;
 }

1 个答案:

答案 0 :(得分:3)

要获取程序的参数,您需要使用参数计数(通常命名为main)和参数数组(通常命名为argc)定义argv函数,所以

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 a b c时,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

请注意,perror

等函数失败时调用fopen是个好习惯

顺便说一下,你忘记在程序中拨打fclose了。您可能还会了解有关fflush的更多信息。您应该更喜欢snprintfsprintf以避免buffer overflows。了解undefined behavior的更多信息,并对此感到非常害怕。

请养成编译所有警告和习惯的习惯。调试信息(例如gcc -Wall -Wextra -g如果使用GCC ....),那么学习如何使用调试器。

阅读perror(3)fopen(3)fclose(3)fflush(3)snprintf(3)并养成习惯,阅读您所有功能的documentation想用。

另见csplit;你可以通过研究在Linux上实现它的free softwarecoreutils的源代码来获得一些灵感。