2010-02-11 7 views
5

C dilinde dosya tanıtıcıları dizisi oluşturmaya nasıl giderim?
Ana argümanlarına bir dizi dosya tanıtıcısı oluşturmak istiyorum ... gibi a1.txt, a2.txt, vs ... Programın bu dosyaları kullanmasını sağlamak için ./prog arg1.txt arg2.txt arg3.txt çalışırdım.
Ardından, ana argümanı char **argvDosyalara işaretçi dizisi oluştur

Argv dosyasından dosya/dosya tanıtıcı dizisi oluşturmak istiyorum. Şimdiye kadar sahip olduğum şey bu.

FILE *inputFiles[argc - 1]; 
int i; 
for (i = 1; i < argc; i++) 
    inputFiles[i] = fopen(argv[i], "r"); 
+0

Onunla ilgili yanlış bir şey bulamıyorum. Sorun ne? –

cevap

7

Bu kod gayet iyi, ancak C99'da derlemeyi unutmayın. Eğer C99 kullanmazsanız

, şöyle öbek üzerinde dizi oluşturmak gerekir:

FILE** inputFiles = malloc(sizeof(FILE*) * (argc-1)); 

// operations... 

free(inputFiles); 
+0

Teşekkürler. Sadece sake'i test etmek için dizi işaretçilerinin işaret ettiği dosyaların isimlerini nasıl yazdırabilirim? – Hristo

+0

@Hristo - Dosyanın adını FILE * 'dan kurtarmanın bir yolu yoktur. Fakat argv dizisine sahip olduğunuzdan, inputFiles [n] dosya adı argv [n] 'de bulunabilir. –

+0

evet, başka bir dizide saklanan dosyaların isimleri var, sadece başka bir şekilde yapabilir miyim diye merak ediyordum. C için yeniyim, bu benim 4. hafta :) – Hristo

2
#include <stdio.h>` 

int main(int argc, char **argv) 
{ 
FILE *inputFiles[argc - 1]; 
int i; 
for (i = 1; i < argc; i++) 
{ 
    printf("%s\n",argv[i]); 
    inputFiles[i] = fopen(argv[i], "r"); 
    printf("%p\n",inputFiles[i]); 
} 
    return 0; 
} 

O adlarıyla birlikte her dosya işaretçisi farklı işaretçiler yazdırır. OS'nin dosyaları düzgün şekilde kapatmasına izin veriliyor :)

+0

Teşekkürler. Bu çok mantıklı! – Hristo