0

私はこれを読みましたが、バッファがRAM内のデータの長さを指定していないことしか知りません

    char buf[100];
    snprintf(buf, sizeof(buf), "%s.txt", "abc");
    FILE *f = fopen(buf, "r");

それはどのように機能しますか?関数の引数に buffer を使用する必要があるのはなぜですか? そして、なぜそうしないのですか

    char buf[100] = "abc.txt";
    FILE *f = fopen(buf, "r");

仕事?

4

1 に答える 1

1

実際には、後者の方法も機能します。ただし、多くの場合、実行時にファイル名を作成する必要があります。つまり、ファイル名を作成するにはsnprintf()(を使用していませsprintf()んか?) を使用する必要があります。たとえば、これは次のようになります。

int user_id = get_user_id();
char fname[PATH_MAX];
/* for each user data is in a file <user_id>.txt */
snprintf(fname, sizeof(fname), "%d.txt", user_id);
fp = fopen(fname, "r");

あなたの(非常に単純なケース)では、さらに簡単に行うことができます:

fp = fopen("abc.txt", "r")
于 2013-10-09T02:30:07.767 に答える