1. ホーム
  2. c

[解決済み] なぜ 'fopen' は NULL ポインタを返すのですか?

2022-02-18 01:50:13

質問

C言語で簡単なファイル分割・結合のプログラムを作っています。問題は、何らかの理由で オープン はNULLを返し、そのために私のプログラムは fwrite ステートメントを使用します。どうすれば直るのでしょうか?

以下はCファイルです。

int SplitFile(char* filename, char* output, size_t size)
{
    char current_file_name[256];
    int file_count = 0, i = 0;
    FILE *file = fopen( filename, "rb" );
    printf("split %s into chunks of %d named\n", filename, size);

    if (!file)
       return E_BAD_SOURCE;
    else
    {
        output = (char *) malloc(size * sizeof(char));
        if (output == NULL)
            return E_NO_MEMORY;
        else
        {
            int bytes_read = 0;
            FILE *outFile;
            do
            {
                bytes_read = fread(output, sizeof(char), size, file );
                sprintf(current_file_name, "%s%04lu\n", "part", file_count++);
                outFile = fopen (current_file_name, "wb" );  // THIS RETURNS NULL
                fwrite(output, sizeof(char), bytes_read, outFile); //CRASHES ON THIS LINE
            }
            while ( bytes_read > 0 )
                ;

            //fclose(outFile);
        }
    }
    fclose(file);
    printf("...\n");
    return 0;
}

解決方法は?

を確認することです。 errno いつ fopen リターン NULL .

この問題は、ファイルシステムに書き込もうとすると、そのファイルシステムでは \n をファイル名として使用することができますが、パーミッションの問題である可能性もあります。