2010-05-03 6 views
5

Ich verwende Visual Studio 2005 (C \ C++).C - Öffnen einer Datei in einer Funktion mit fopen

Ich übergebe eine Zeichenfolge in eine Funktion als Char-Array. Ich möchte die als Parameter übergebene Datei öffnen und verwenden. Ich weiß, dass mein Code zu einem gewissen Grad funktioniert, denn wenn ich den Dateinamen als ersten Parameter fest codiere, funktioniert er perfekt.

Ich merke, wenn ich den Wert als eine Uhr betrachten, enthält der Wert die Adresse neben dem Zeichenfolgenliteral. Ich habe versucht, den Dateinamen als Zeiger übergeben, aber es beschwert sich dann über die Typkonvertierung mit __w64. Wie gesagt, es funktioniert gut mit "filename.txt" anstelle von fileName. Ich bin ratlos.

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"); 
... 

Die Aufruffunktion Code lautet:.

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); 

In der Uhr, die ich für Dateinamen hinzugefügt der richtige Text angezeigt wird, so werden die Daten in

+0

Hm ... Ich mache das viel mit MinGW. Die Funktion, die später eine Datei öffnet, wird dem Parameter "const char * filename" übergeben - MinGW hat sich darüber nie beschwert. – mingos

Antwort

5
bestanden immer

Wenn Sie fopen() verwenden dann codierst du in C, nicht in C++. Außerdem übergeben Sie Arrays nicht an Funktionen. Die Syntax für die Parameterliste ist

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

Im Fall von mehrdimensionalen Arrays Sie die Größe der am weitesten rechts stehenden Dimension explizit angeben muss:

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

Das heißt, versuchen, die Parameter von char fileName[50] auf sich ändernde char* fileName.

+0

Mein Fehler - Ändern des Parameters in char * Dateiname ist erfolgreich kompilieren, aber der Dateizeiger ist ungültig und verursacht Fehler, wenn fscan versucht, es zu verwenden. –

+0

zeigen Sie uns den Code, der die Funktion aufruft. – wilhelmtell

+0

Sind Sie sicher, dass die Datei mit diesem Dateinamen existiert? Sind Sie sicher, dass Ihr Arbeitsverzeichnis das Verzeichnis ist, in dem sich die Datei befindet? – wilhelmtell