命令行参数,读取文件

时间:2013-06-01 05:35:56

标签: c file arguments command-line-arguments

如果我进入命令行 C:myprogram myfile.txt

如何在程序中使用myfile。我是否需要扫描它或者是否有任意方式来访问它。

我的问题是如何在程序中使用myfile.txt。

int
main(){
    /* So in this area how do I access the myfile.txt 
    to then be able to read from it./*

5 个答案:

答案 0 :(得分:16)

您可以使用int main(int argc, char **argv)作为主要功能。

argc - 将是您程序的输入参数计数 argv - 将是指向所有输入参数的指针。

因此,如果您输入C:\myprogram myfile.txt来运行程序:

  • argc将为2
  • argv[0]将为myprogram
  • argv[1]将为myfile.txt

更多详情can be found here

阅读文件:
FILE *f = fopen(argv[1], "r"); // "r" for read

以其他模式打开文件read this

答案 1 :(得分:2)

  1. 像这样声明你的主要

    int main(int argc, char* argv [])

    • argc指定了参数的数量(如果没有传递参数,则对于程序名称,它等于1)

    • argv是一个指向字符串数组的指针(至少包含一个成员 - 程序名称)

    • 您将从命令行中读取文件,如下所示:C:\my_program input_file.txt

  2. 设置文件句柄:

    File* file_handle;

  3. 打开file_handle进行阅读:

    file_handle = fopen(argv[1], "r");

    • 如果文件不存在,fopen返回指向文件的指针或NULL。 argv 1,包含您要作为参数读取的文件

    • “r”表示您打开文件进行阅读(更多关于其他模式here

  4. 使用例如fgets

    阅读内容

    fgets (buffer_to_store_data_in , 50 , file_handle);

    • 你需要一个char *缓冲区来存储数据(比如一个字符数组),第二个参数指定读取多少,第三个是指向文件的指针
  5. 最后关闭手柄

    fclose(file_handle);

  6. 全部完成:)

答案 2 :(得分:1)

这是编程101方式。这需要很多理所当然的事情,它根本不会进行任何错误检查!但它会让你开始。

/* this has declarations for fopen(), printf(), etc. */
#include <stdio.h>

/* Arbitrary, just to set the size of the buffer (see below).
   Can be bigger or smaller */
#define BUFSIZE 1000

int main(int argc, char *argv[])
{
    /* the first command-line parameter is in argv[1] 
       (arg[0] is the name of the program) */
    FILE *fp = fopen(argv[1], "r"); /* "r" = open for reading */

    char buff[BUFSIZE]; /* a buffer to hold what you read in */

    /* read in one line, up to BUFSIZE-1 in length */
    while(fgets(buff, BUFSIZE - 1, fp) != NULL) 
    {
        /* buff has one line of the file, do with it what you will... */

        printf ("%s\n", buff); /* ...such as show it on the screen */
    }
    fclose(fp);  /* close the file */ 
}

答案 3 :(得分:0)

命令行参数只是普通的C字符串。你可以随心所欲地做任何事情。在您的情况下,您可能想要打开一个文件,从中读取一些文件并关闭它。

您可能会发现此question(和答案)很有用。

答案 4 :(得分:0)

您收到的有关使用命令行的所有建议都是正确的,但是 听起来你也可以考虑使用一个典型的模式来读取stdin而不是文件,然后通过管道驱动你的app,例如cat myfile > yourpgm。 然后,您可以使用scanf从标准输入读取。 以类似的方式,您可以使用stdout/stderr来生成输出。