5

Visual Studio 2005(C \ C ++)を使用しています。

文字列をchar配列として関数に渡します。パラメータとして渡されたファイルを開いて使用したい。ファイル名を最初のパラメーターとしてハードコーディングすると完全に機能するため、コードがある程度機能することはわかっています。

値を時計として見ると、値には文字列リテラルのほかにアドレスが含まれていることに気付きます。ファイル名をポインタとして渡そうとしましたが、__w64による型変換について文句を言います。前に言ったように、fileNameの代わりに「filename.txt」を使用すると正常に機能します。私は困惑しています。

void read(char fileName[50],int destArray[MAX_R][MAX_C],int demSize[2])
{
    int rows=0;
    int cols=0;
    int row=0;
    int col=0;
    FILE * f = fopen(fileName,"r");
...

呼び出し元の関数コードは次のとおりです。

char in_filename[50];
int dem[MAX_R][MAX_C]; 
int dem_size[2];
get_user_input( in_filename);
read(in_filename, dem, dem_size );

ファイル名に追加した時計では、正しいテキストが表示されるため、データが渡されます。

4

1 に答える 1

5

を使用している場合はfopen()、C++ではなくCでコーディングしています。また、これは配列を関数に渡す方法ではありません。パラメータリストの構文は次のとおりです。

void f(char arr[], unsigned int arr_size);

多次元配列の場合、右端の次元のサイズを明示的に指定する必要があります。

void f(char arr[][20], unsigned int arr_size);

そうは言っても、パラメータをからchar fileName[50]に変更してみてくださいchar* fileName

于 2010-05-03T01:02:30.247 に答える