我有一个输出类似于此样式的文本文件:
有些文本10个试验,其他文本12个试验,还有一些文本20个试验
这里有些文本7个试验文本16个试验和更多文本20个试验

我要做的是在测试前获取值我有一个理论上可以工作但由于文本被操纵而中断的代码,它与运行时的代码不同

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()strcmp(token, trial)应该匹配时,token给我非零。当我打印trial值时,这就是我在结果中得到的结果
tmp: 12 | token trials | strcmp -81
...

最佳答案

注意

 char trial[6] = "trials";

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

07-26 09:13