2

単純な fopen 操作が機能しないようです。perror が返されました - 引数が無効です。何が間違っている可能性があります。

R: に abc.dat という ascii ファイルがあります。

int main()
{
    FILE *f = fopen("R:\abc.dat","r");
    if(!f)
    {
        perror ("The following error occurred");

        return 1;
    }
}

出力:

次のエラーが発生しました: 引数が無効です。

4

3 に答える 3

5

あなたのをエスケープします\\\文字列で使用する場合は必須です。

FILE *f = fopen("R:\\abc.dat","r");

それ以外の場合、文字列には無効な引数である「アラート」エスケープ シーケンスfopenが含まれていると見なされます。\a

一般的なエスケープ シーケンスとその目的は次のとおりです。

\a  The speaker beeping
\\  The backslash character

\b  Backspace (move the cursor back, no erase)
\f  Form feed (eject printer page; ankh character on the screen)
\n  Newline, like pressing the Enter key
\r  Carriage return (moves the cursor to the beginning of the line)
\t  Tab
\v  Vertical tab (moves the cursor down a line)
\’  The apostrophe
\”  The double-quote character
\?  The question mark
\0  The “null” byte (backslash-zero)
\xnnn   A character value in hexadecimal (base 16)
\Xnnn   A character value in hexadecimal (base 16)
于 2012-06-25T00:07:51.360 に答える
3

ファイル名の引数でバックスラッシュをエスケープする必要があります。

 FILE *f = fopen("R:\\abc.dat","r");

これは、文字どおり - UNnescaped -\a制御文字bellであるためです。つまり、システム アラートを鳴らす/表示するなど、通常は を意味します。これはファイル名では無効な文字です。

ベルの文字を参照してください:

C プログラミング言語 (1972 年に作成) では、\a を使用してベル文字を文字列または文字定数に配置できます。(「a」は「警告」または「可聴」を表し、\b がバックスペース文字に既に使用されているため選択されました。)

于 2012-06-25T00:08:03.483 に答える
2

ファイル名のバックスラッシュをエスケープする必要があります。

FILE *f = fopen("R:\\abc.dat", "r");
于 2012-06-25T00:08:15.060 に答える