以下が機能する状況はありますか?(変数の値を取得し、配列に格納されているテキストに基づいてファイルを作成しようとしています。)
#include <stdio.h>
int main()
{
char a = "a";
FILE *out;
out = fopen( "%s.txt", a, "w" );
fclose(out);
return 0;
}
ありがとう
char 変数に文字列リテラルを割り当てることはできません。コードを次のように変更する必要があります。
char a[] = "a";
もう 1 つの問題は、fopen
関数が 2 つの引数しか取得しないのに、3 つを渡すことです。
いいえ、事前に sprintf() を文字列に変換してから、通常どおり fopen(name,mode) を呼び出す必要があります。
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;
}
これを解決するために、私は次のことを行いました:
#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;
}
いいえ、fopen()
戻りますFILE*
FILE *fopen(const char *path, const char *mode);
+
char a[]= "a";