2010-02-11 14 views
5

Làm cách nào để tạo một mảng con trỏ tệp trong C?
Tôi muốn tạo một mảng các con trỏ tệp đến các đối số của chính ... như a1.txt, a2.txt, v.v ... Vì vậy, tôi sẽ chạy ./prog arg1.txt arg2.txt arg3.txt để chương trình sử dụng các tệp này.
Sau đó, đối số cho chính là char **argvtạo mảng con trỏ tới các tệp

Từ argv, tôi muốn tạo mảng tệp/tệp con trỏ. Đây là những gì tôi có cho đến nay.

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

Tôi không thể tìm thấy bất kỳ điều gì sai trái với nó. Có chuyện gì vậy? –

Trả lời

7

Mã là tốt, nhưng hãy nhớ biên dịch trong C99.

Nếu bạn không sử dụng C99, bạn cần phải tạo ra các mảng trên heap, như:

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

// operations... 

free(inputFiles); 
+0

Cảm ơn. Vì vậy, chỉ để thử nghiệm sake, làm thế nào tôi sẽ in tên của các tập tin mà các con trỏ mảng trỏ đến? – Hristo

+0

@Hristo - không có cách nào để khôi phục tên tệp từ tệp FILE *. Nhưng vì bạn có mảng argv, tên tệp của inputFiles [n] có thể được tìm thấy tại argv [n]. –

+0

có, tôi có tên của các tập tin được lưu trữ trong một mảng khác, tôi đã chỉ tự hỏi nếu tôi có thể làm điều đó theo cách khác. Tôi mới đến C, đây là tuần thứ 4 của tôi :) – 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; 
} 

It in con trỏ khác nhau cho mỗi con trỏ tập tin cùng với các tên. Cho phép hệ điều hành đóng các tệp một cách chính xác :)

+0

Cảm ơn. Điều đó làm cho rất nhiều ý nghĩa! – Hristo