2016-07-03 7 views
-1

テキストファイルから文字列を取り出し、配列に格納するプログラムを作成しようとしています。Cプログラミング、charポインタの配列

私はdelims取得テキストファイルから仮定:私はこれらのdelimsを取得した後、私は、見つかったトークンの数と同じサイズの配列を作成したい「SBCA-304」、「1」、「DFS」を

を配列内の要素は、 "1"、 "dfs"、 "w342"へのcharポインタでなければなりません。

int lexer(FILE* file){ 

char line[50]; 
char* delim;  
char* tokenArray[100]; 
int i = 0; 

while(fgets(line,sizeof(line),file)){ 
    printf("%s\n", line); 

    if(is_empty(line) == 1) 
     continue; 

    delim = strtok(line," "); 


    if(delim == NULL) 
     printf("%s\n", "ERROR"); 

    while(delim != NULL){ 

     if(delim[0] == '\n'){ 
     //rintf("%s\n", "olala"); 
      break; 
     } 
     tokenArray[i] = strdup(delim); 
     printf("Token IN array: %s\n", tokenArray[i]); 
     i= i+ 1; 
     delim = strtok(NULL, " "); 

    } 
} 

printf("%s\n", tokenArray[6]); 

fclose(file); 
return 0; 

今私はdelimsを取得していますし、私は、配列にそれらを保存するんだけど、私はポインタを格納していないよ右ので、私はそれをやっているとは思いません。私はまたtokenArrayを別の機能に送りたいと思っています。私は何をすべきか?

+1

文字列の数を100以下に制限していないというバグです。 – PaulMcKenzie

+1

「ポインタを格納していない」と言ったらどういう意味ですか? 'tokenArray [i] = strdup(delim)'はどうしますか?あなたの配列にポインタを格納します。入力ファイルを表示できますか?この機能によって印刷される期待された出力と実際の出力を教えてください。入力ファイルには少なくとも7つの「トークン」がありますか?デバッガでコードごとにステップごとに進めてみましたか?あなたがまだそれをしていない場合は、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)をご覧ください。 –

+1

'tokenArray'を呼び出し関数に返すことはできませんが、このコードが定義されている関数から他の関数​​を呼び出した場合は、それらの関数に完全に渡すことができます。配列を返す必要がある場合は、配列を動的に割り当てて配列へのポインタを呼び出しコードに戻す必要があります。一般的な規則として、関数がファイルを開かない場合は、関数を閉じてはいけません。ファイルを開く場合は、ファイルを閉じます。開いていないファイルは閉じていますが、これは通常はお勧めできません。 –

答えて

0

私は非常に小さな変更であなたのコードをテストし、あなたが関数にtokenArrayを渡すことができます:あなたのループがあり

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void test(char *tokenArray[]) { 
    printf("Test %s\n", tokenArray[2]); 
} 

int main(void) { 

    char line[50]; 
    char *delim; 
    char *tokenArray[100]; 
    int i = 0; 
    FILE* file; 

    file = fopen("data.txt","r"); // read mode 

    while (fgets(line, sizeof(line), file)) { 
     printf("%s\n", line); 

     delim = strtok(line, " "); 


     if (delim == NULL) 
      printf("%s\n", "ERROR"); 

     while (delim != NULL) { 

      if (delim[0] == '\n') { 
       //rintf("%s\n", "olala"); 
       break; 
      } 
      tokenArray[i] = strdup(delim); 
      printf("Token IN array: %s\n", tokenArray[i]); 
      i = i + 1; 
      delim = strtok(NULL, " "); 

     } 
    } 

    printf("%s\n", tokenArray[2]); 
    test(tokenArray); 
    fclose(file); 
    return 0; 
} 

ファイル

one dfs w342 

data.txtを出力

one dfs w342 
Token IN array: one 
Token IN array: dfs 
Token IN array: w342 
w342 
Test w342