2010-05-03 10 views
5

Używam Visual Studio 2005 (C \ C++).C - Otwieranie pliku wewnątrz funkcji za pomocą fopen

Przekazuję ciąg znaków do funkcji jako tablicę znaków. Chcę otworzyć przekazany plik jako parametr i użyć go. Wiem, że mój kod działa w pewnym stopniu, ponieważ jeśli podam hardcode jako pierwszy parametr, działa on idealnie.

Zauważam, że jeśli patrzę na wartość jako zegarek, wartość zawiera adres poza literałem ciągu. Próbowałem przekazać nazwę pliku jako wskaźnik, ale potem narzeka na konwersję typu za pomocą __w64. Jak już powiedziałem, działa dobrze z "filename.txt" zamiast nazwy pliku. Jestem zaskoczony.

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

Kod funkcji powołaniem jest:

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

W zegarku dodałem do pliku pojawi się odpowiedni tekst, więc dane są przekazywane w coraz

+0

Hm ... Dużo robię z MinGW. Funkcja, która później otwiera plik, przekazuje parametr "const char * filename" - MinGW nigdy nie narzekał na to. – mingos

Odpowiedz

5

Jeśli używasz fopen(). następnie kodujesz w C, nie w C++. Ponadto nie jest to sposób przekazywania tablic do funkcji. Składnia listy parametrów jest

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

W przypadku wielowymiarowych tablic należy określić wielkość prawej skrajnej wymiaru extenso:

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

Powiedział, spróbuj zmienić parametr z char fileName[50] do char* fileName.

+0

Mój błąd - zmiana parametru na char * nazwa pliku kończy się kompilacją, jednak wskaźnik pliku jest nieprawidłowy i powoduje błędy, gdy fscan próbuje go użyć. –

+0

pokaż nam kod, który wywołuje funkcję. – wilhelmtell

+0

Czy jesteś pewien, że plik o tej nazwie istnieje? Czy na pewno twój katalog roboczy jest katalogiem, w którym znajduje się plik? – wilhelmtell