2016-11-22 11 views
0
int i=0; 
int numProgs=0; 
char* input[500]; 
char line[500]; 
FILE *file; 
file = fopen(argv[1], "r"); 
while(fgets(line, sizeof line, file)!=NULL) { 
    /*check to be sure reading correctly 
    add each filename into array of input*/ 
    input[i] = (char*)malloc(strlen(line)+1); 
    strcpy(input[i],line); 
    printf("%s",input[i]);/*it gives the hole line with\n*/ 
    i++; 
    /*count number of input in file*/ 
    numProgs++; 
} 
/*check to be sure going into array correctly*/ 
fclose(file); 

私は動的に行う必要があるので、各行の入力txtのサイズはわかりません。 この型のchar * input []を使う必要がありますし、int numProgsで行番号を保持する必要もあります。 入力テキストファイルに複数の行があり、各行の文字サイズが不明です。テキストファイルを動的に読み込んでCのポインタchar配列に入れます

+1

可能な重複:http://stackoverflow.com/questions/8236/how-do-you-determine-the-size-of-a-file-in-cあなたが言うにメモリを割り当てる呼び出し – schil227

+0

' char * line'を使用します。 'fgets'を呼び出した後、' newline'が読み込まれたかどうかを確認します。そうだったら、あなたは全体のラインを手に入れました。そうでない場合は、より大きい配列を再割り当てし、行全体を取得するのに必要な回数だけさらに読み込みます。しかし、各行の後に 'free(line)'をしないでください。 –

+0

@ schil227このQはファイル行数です。 – BLUEPIXY

答えて

0
FILE *file; 
file = fopen("test.txt", "r"); 
fseek(file, 0, SEEK_SET); 
int numRow = 1, c; 
while ((c = fgetc(file)) != EOF) 
{ 
    if (c == '\n') 
     numRow++; 
} 
fseek(file, 0, SEEK_SET); 
char **input; 
input = malloc(sizeof(char) * numRow); 
int i, j = 0, numCol = 1, curPos; 
for (i = 0; i < numRow; i++) 
{ 
    curPos = (int)ftell(file); 
    while((c = fgetc(file)) != '\n') 
    { 
     numCol++; 
    } 
    input[i] = malloc(sizeof(char) * numCol); 
    fseek(file, curPos, SEEK_SET); 
    while((c = fgetc(file)) != '\n') 
    { 
     input[i][j++] = c; 
    } 
    input[i][j + 1] = '\n'; 
    numCol = 1; 
    j = 0; 
} 
+0

入力テキストファイルに複数の行があり、各行の文字サイズが不明です。 – fulladder

+0

ああ、そうです。更新された答えを確認して、それが機能するかどうかを確認します。 – bafflingbill23

+0

なぜそれは無限ループですか?実行時間エラー – fulladder

関連する問題