0

プログラムの 1 つで次の C 関数を使用する必要があります (Kiel コンパイラを使用):

Prototype: int fopen (FILE* f, char* filename, char* mode)
Parameters: 
1. f-Pointer to file structure
2. filename-Pointer to a memory location that contains the filename.
3. mode-Pointer to a memory location that contains the file open mode.
Return Value: 1, if file was opened successfully.
0, otherwise.

これを試したところ、エラーが発生しました:

FILE * f;
char* filename;
char* mode;
int t;


filename[0]= 'g';

mode[0]='w';


t= fopen( f, filename[0],mode[0]);

エラー:

COPYRIGHT Copyright (C) 2012 - 2013 ARM Ltd and ARM Germany GmbH. All rights reserved.
*** ERROR C141 IN LINE 171 OF F34x_MSD_F931DC_main.c: syntax error near 'FILE'
*** ERROR C202 IN LINE 171 OF F34x_MSD_F931DC_main.c: 'f': undefined identifier
*** ERROR C141 IN LINE 172 OF F34x_MSD_F931DC_main.c: syntax error near 'char'
*** ERROR C202 IN LINE 172 OF F34x_MSD_F931DC_main.c: 'filename': undefined identifier
*** ERROR C141 IN LINE 173 OF F34x_MSD_F931DC_main.c: syntax error near 'char'
*** ERROR C202 IN LINE 173 OF F34x_MSD_F931DC_main.c: 'mode': undefined identifier
*** ERROR C141 IN LINE 174 OF F34x_MSD_F931DC_main.c: syntax error near 'int'
*** ERROR C202 IN LINE 174 OF F34x_MSD_F931DC_main.c: 't': undefined identifier
*** ERROR C202 IN LINE 177 OF F34x_MSD_F931DC_main.c: 'filename': undefined identifier
*** ERROR C202 IN LINE 179 OF F34x_MSD_F931DC_main.c: 'mode': undefined identifier
*** ERROR C202 IN LINE 182 OF F34x_MSD_F931DC_main.c: 't': undefined identifier

C51 COMPILATION COMPLETE.  0 WARNING(S),  11 ERROR(S)

誰かが正しい使用法で私を助けることができますか?

アップデート:

メインの最初に変数宣言を配置すると、すべてのエラーを取り除くことができました。しかし、新しいエラーが発生しています:

COPYRIGHT Copyright (C) 2012 - 2013 ARM Ltd and ARM Germany GmbH. All rights reserved.
*** ERROR C214 IN LINE 184 OF F34x_MSD_F931DC_main.c: illegal pointer conversion

ここでヒントを得ましたが、それでもこの問題を解決する方法を理解できません

4

4 に答える 4

1

引数を渡す正しい方法は次のとおりです。

            t= fopen(f, filename, mode);
于 2013-07-11T11:49:13.157 に答える
0

C ポインターの経験がないと思われる間違いがいくつかあります。したがって、あなたの質問のほかに:

a) すべてのポインタが初期化されていません。これにより、未定義の動作が発生します。

b) すべてのポインターは、予約されていないメモリーを指します。これにより、未定義の動作が発生します。

c)filenameおよびmodechar *、文字列であると見なされます。それらは 0 で終了する必要があります。

あなたの質問の主題とのより高い関係で:

d) ポインタは渡さないが、配列の最初の要素を渡す必要がある

おそらく、次のようなことをしたいでしょう:

t= fopen( f, "g", "w");

char *文字列リテラルはCにあるため、これは機能します。

e) fopen()C にはすでに an があります。

f)独自のものがある場合、おそらくパラメータリストを介してfopen()タイプのエンティティを返す必要があります。FILE *これを行うには、次の 2 つの方法があります。

タイプのエンティティがあり、FILEこれへのポインターを渡します。

 FILE file;
 t= fopen( &file, "g", "w");

fopen()そのエンティティを作成するため、タイプのエンティティがあり、FILE *これへのポインターを渡します。

FILE *file;
t= fopen( &file, "g", "w");

Cでポインタがどのように機能するかを学ぶことにさらに時間を費やすことを強くお勧めします.それは簡単ではありません.

于 2013-07-11T12:23:49.537 に答える