6

以下が機能する状況はありますか?(変数の値を取得し、配列に格納されているテキストに基づいてファイルを作成しようとしています。)

#include <stdio.h>

int main()
{
    char a = "a"; 
    FILE *out;
    out = fopen( "%s.txt", a, "w" );
    fclose(out);
    return 0;
}

ありがとう

4

10 に答える 10

1

char 変数に文字列リテラルを割り当てることはできません。コードを次のように変更する必要があります。

char a[] = "a";

もう 1 つの問題は、fopen関数が 2 つの引数しか取得しないのに、3 つを渡すことです。

于 2013-05-07T17:35:10.450 に答える
0

いいえ、事前に sprintf() を文字列に変換してから、通常どおり fopen(name,mode) を呼び出す必要があります。

于 2013-05-07T17:41:58.497 に答える
0

fopen()についてもっと読む必要があります:

FILE * fopen ( const char * ファイル名, const char * モード );

ファイルを開く

パラメーター filename で指定された名前のファイルを開き、返された FILE ポインターによって今後の操作で識別できるストリームに関連付けます。

そして、ここでコードを修正する方法の後に

#include <stdio.h>

main(){

char a = 'a';
char filename[64];

FILE *out;
sprintf(filename, "%c.txt", a)

out = fopen( filename, "w");

fclose(out);

return 0;
}
于 2013-05-07T17:38:07.987 に答える
0

これを解決するために、私は次のことを行いました:

#include <string.h>

int main()
{
    char fileName = "a"; 
    FILE *out;

    char fileToOpen[strlen(fileName) + 5]; 
    // strlen(fileName)+5 because it's the length of the file + length of ".txt" + char null

    strcpy(fileToOpen, fileName); 
    // Copying the file name to the variable that will open the file

    strcat(fileToOpen, ".txt"); 
    // appending the extension of the file

    out = fopen( fileToOpen, "w" ); 
    // opening the file with a variable name

    if(out == NULL)
    {
        perror("Error: ");
        exit(EXIT_FAILURE);
    }
    fclose(out);

    return EXIT_SUCCESS;
}
于 2019-09-17T15:51:55.003 に答える
-2

いいえ、fopen()戻りますFILE*

FILE *fopen(const char *path, const char *mode);

+

char a[]= "a";

于 2013-05-07T17:35:40.147 に答える