16

如果我输入命令行 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./*
4

5 回答 5

22

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

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

所以,如果你进入C:\myprogram myfile.txt运行你的程序:

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

更多细节可以在这里找到

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

要以其他模式打开文件,请阅读此.

于 2013-06-01T05:39:00.700 回答
4
  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”表示您打开文件进行阅读(更多关于其他模式的信息

  4. 使用例如fgets阅读内容:

    fgets (buffer_to_store_data_in , 50 , file_handle);

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

    fclose(file_handle);

全部做完 :)

于 2013-06-01T05:46:21.627 回答
3

这就是编程 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 */ 
}
于 2013-06-01T05:56:17.403 回答
0

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

您可能会发现这个问题(和答案)很有用。

于 2013-06-01T05:39:38.597 回答
0

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

于 2013-06-01T05:55:03.740 回答