2016-07-03 76 views
-1

我想创建一个从文本文件中取出字符串并将它们存储到数组中的程序。C编程,char指针数组

从文本文件,我得到delims假设:“一”,“DFS”,“W342”

后,我得到这些delims,我想与同样大小的令牌数量发现创建一个数组,并且数组中的元素必须是指向“one”,“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)'有什么作用?它在你的数组中存储一个指针。,你能告诉我们输入文件吗?你能告诉我们这个功能打印的预期和实际输出吗?你的输入文件中至少有七个“令牌”?您是否尝试过在调试器中逐行执行代码?如果你还没有这样做,请[阅读关于如何提出好问题](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; 
} 

Data.txt文件

one dfs w342 

输出

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