C - 使用strtok只给出了每一行的第一个字?

时间:2014-09-21 06:45:32

标签: c arrays struct strtok

我的代码如下。我正在使用结构并接收输入文本文件。我把它分成几行,然后尝试将每一行分成单独的单词。使用strtok,它目前只打印每行的第一个单词。我该如何解决这个问题?

typedef struct {
    char linewords[101];
    char separateword[101];
} line;

以下是主要内容:

line linenum[101];
char var[101]
char *strtok(char *str, const char delim);

while fgets(linenum[i].linewords, 101, stdin) != NULL) {

    char* strcopy();
    char* strtok();
    strcpy(linenum[i].separateword,linenum[i].linewords);

    strtok(linenum[i].separateword, " "); /*line i'm referring to*/
    i++;
    }
}

我提前为任何困惑道歉。我想要的是拥有它所以,因为亚麻[i] .separateword [0]将返回第一个单词,等等。这可能吗?或者是否有另一种方法将我的输入分成单词?

谢谢

1 个答案:

答案 0 :(得分:2)

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

typedef struct {
    char linewords[101];
    char *separateword[51];
} line;

int main(void){
    line linenum[101];
    int i = 0;

    while(fgets(linenum[i].linewords, sizeof(linenum[i].linewords), stdin) != NULL) {
        char *token, *delm = " \t\n";
        int j = 0;
        for(token = strtok(linenum[i].linewords, delm);
            token;
            token = strtok(NULL, delm)){
            linenum[i].separateword[j++] = token;
        }
        linenum[i++].separateword[j] = NULL;
    }
    {//test print
        char **p = linenum[0].separateword;
        while(*p)
            puts(*p++);
    }
    return 0;
}