0

今、私はこのようなものを持っています...

CMD コンソール ウィンドウ: c:\users\username\Desktop> wrapfile.txt hello.txt

こんにちは

どうすればこのようなものを手に入れることができますか?

CMD コンソール ウィンドウ: c:\users\username\Desktop> wrapfile.txt hello.txt hi.txt

こんにちはこんにちは

このコードで?

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

int main(int argc[1], char *argv[1])
{
    FILE *fp; // declaring variable 
    fp = fopen(argv[1], "rb");
    if (fp != NULL) // checks the return value from fopen
    {
        int i;
        do
        {
            i = fgetc(fp);     // scans the file 
            printf("%c",i);
            printf(" ");
        }
        while(i!=-1);
        fclose(fp);
    }
    else
    {
        printf("Error.\n");
    }
}
4

2 に答える 2

2

まず第一に、main宣言では、int main(int argc, char* argv[])現在持っているものの代わりに使用する必要があります。変数を宣言するときに配列サイズを指定しても意味がありませんextern(それが argv と argc です)。その上、正しい型を使用していません。argcでありintegerargvであるarray of strings(どれが であるかarrays of chars)。sのargv配列の配列も同様ですchar

次に、単に argc カウンターを使用して argv 配列をループします。argv[0]はプログラムの名前で、argv[1]toargv[n]は実行中にプログラムに渡す引数になります。

これがどのように機能するかについての良い説明があります: http://www.physics.drexel.edu/courses/Comp_Phys/General/C_basics/#command-line

私の2セント。


編集:これは、作業プログラムのコメント付きバージョンです。

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

int main(int argc, char **argv)
{
    FILE *fp;
    char c;
    if(argc < 3)    // Check that you can safely access to argv[0], argv[1] and argv[2].
    {               // If not, (i.e. if argc is 1 or 2), print usage on stderr.
        fprintf(stderr, "Usage: %s <file> <file>\n", argv[0]);
        return 1;   // Then exit.
    }

    fp = fopen(argv[1], "rb");   // Open the first file.
    if (fp == NULL)   // Check for errors.
    {
        printf("Error: cannot open file %s\n", argv[1]);
        return 1;
    }

    do   // Read it.
    {
        c = fgetc(fp); // scans the file
        if(c != -1)
            printf("%c", c);
    } while(c != -1);
    fclose(fp);   // Close it.

    fp = fopen(argv[2], "rb");   // Open the second file.
    if (fp == NULL)   // Check for errors.
    {
        printf("Error: cannot open file %s\n", argv[2]);
        return 1;
    }

    do   // Read it.
    {
        c = fgetc(fp); // scans the file
        if(c != -1)
            printf("%c", c);
    } while(c!=-1);
    fclose(fp);   // Close it.

    return 0;       // You use int main and not void main, so you MUST return a value.
}

お役に立てば幸いです。

于 2012-12-06T22:39:00.240 に答える
1

argv[2] は 2 番目のファイル名になります。

argc の値をチェックして、十分な引数が有効かどうかを確認することを忘れないでください。

より良い: boost::program_options を使用します。

注意: このコードは、Windows システムでは Unicode に対応していないため、移植できません。このプラットフォームですべてのファイル名をサポートするようにする方法については、utf8everywhere.org を参照してください。

于 2012-12-06T21:40:23.673 に答える