通过字符数组中的令牌获取参数

时间:2019-03-26 13:05:49

标签: c parsing token

我有一个文本文件,其输出类似于以下样式:

  

一些文本有10个试验,这里有12个试验,还有txt 20个试验

     

此处有7项试验文本,有16项试验文本,还有txt 20项试验文本

     

我想做的是在 trials 之前获取值。我有一个理论上可以正常工作的代码,但是由于文本被操纵而与您运行{{1}时的代码不同,因此无法运行}

strcmp()

主体看起来像这样。

char *fileToString(char *fileName){
    FILE *file = fopen(fileName, "rb");
    long lSize;

    fseek(file, 0, SEEK_END);
    lSize = ftell(file);
    fseek(file, 0, SEEK_SET);

    char *buffer = malloc(lSize);
    fread(buffer, 1, lSize, file);
    fclose(file);
    return buffer;
}

结果应为

    path[20] = "path/to/file.txt";
    char *a = fileToString(path);
    char trial[6] = "trials";
    char *token, *tmp;
    token = strtok(a, " \n");
    tmp = token;
    while(token != NULL){
        if(strcmp(token, trial)==0){
            printf("%s trials\n", tmp);
        }
        printf("tmp: %s | token %s | strcmp %d\n", tmp, token, strcmp(token,trial));
        tmp = token;
        token = strtok(NULL, " \n");

    }

等,但是10 trials 12 trials 20 trials 7 trials 16 trials 20 trials 有时会给我非零值,即使strcmp(token, trial)token应该匹配。当我打印trial值时,这就是我得到的结果

strcmp()

1 个答案:

答案 0 :(得分:3)

请关注

 char trial[6] = "trials";

这里trial[6]应该是trial[7],以便不仅存储字母,还存储'\0'(行尾)