2016-04-09 23 views
-5

Argc ve argv kullanarak dosyanın adını komut satırından alması gereken bir programım var. Print argv [1] ve argv [2] bana tam olarak geçtiğim isimleri gösterir, ancak argv [1] ve argv [2] parametrelerini başka bir fonksiyonda açmak için parametreler olarak geçersem sadece açamadığım hata satırını gösteririm dosya.
Benim ana:Argv ile dosyaları açın bana dosya veriyor NULL

int main(int argc, char* argv[]) 
{ 
    if (argc != 4) 
    { 
     puts("Incorrect number of parameters."); 
     return 1; 
    } 
    else 
    { 
    Image *a, *b; 

    a = OpenFile(argv[1]); 
    b = OenFile(argv[2]); 

    } /* else */ 
    return 0; 
} /* main */ 

fonksiyon OpenFile dosyadan bilgi dolu bir yapı dönecektir. İşte işlevinin ilk parçası: "açılırken hata dosyası"

Image *OpenFile(char* name) 
{ 
    FILE* f = fopen(name, "r"); 
    Image* imagem; 
    int temp, i, cont, data[MAX]; 
    char aux[2]; 

    if(f == NULL)  
    { 
     puts("Error opening file."); 
     return NULL; 
    } /* if */ 
    ... 
} 

Doğru isimler geçiyorum ama almak Açmaya çalıştığım her dosya için satır.

Düzenleme: Bana "Böyle bir dosya veya dizin yok" veriyor, ancak dosyaları .exe'nin bulunduğu dizine kopyaladım. Dosyanın adını komut satırından ilk defa kullanmıyorum, fakat ilk defa başka bir işleve parametre olarak geçiyorum. fopen adam sayfasından

+0

perror kullanmak için errno.h içermelidir, mantıksal bir sonuçtur dosyayı açmaya çalışırken program bir hatayla karşılaştı gibi görünüyor. –

+0

Lütfen programa aktardığınız dosyaların isimlerini belirtin. Kodları nasıl derlediğinizi ve yürütülebilir işlemin oluşturulduktan sonra nereye yerleştirildiğini bilmiyoruz. Belki de çıkış dizininiz okumaya çalıştığınız dosyaları içermiyordur. – Kamil

+0

Doğal olarak, tamamen kesin, mutlak dosya belirtimi tamamen belirsiz geçiyorsunuz? –

cevap

3

:

RETURN VALUE 

başarıyla tamamlanması Fopen(), fdopen() ve freopen üzerine() Bir DOSYA işaretçisidir. Aksi takdirde, NULL döndürülür ve hatayı gösterecek şekilde errno ayarlanır.

if(f == NULL)  
{ 
    puts("Error opening file."); 
    return NULL; 
} /* if */ 

İle:

Yani sen değişebilir

if(f == NULL)  
{ 
    perror("fopen"); 
    return NULL; 
} /* if */ 

Ve başarısız fopen nedene oldukça açıklayıcı mesaj getireyim.

Sen Verdiğiniz küçük bilgilerden

+1

* Dosya adını * “perror” olarak değiştirmek daha da iyidir. –

+0

@AnttiHaapala evet bu daha iyi olurdu ve hata ayıklamayı kolaylaştırır. İyi yakalama! – sestus

+0

Şimdi bunu deneyeceğim. Teşekkürler! – Inn