Получение параметров через токены в массиве char - PullRequest
0 голосов
/ 26 марта 2019

У меня есть текстовый файл с выводом, похожим на этот стиль:

некоторый текст 10 испытаний другой текст здесь 12 испытаний и немного больше txt 20 испытаний

некоторый текст здесь7 испытаний текст 16 испытаний и более txt 20 испытаний

и т. Д.

Я пытаюсь получить значения до испытаний У меня есть код, которыйработать теоретически, но ломается, потому что текст манипулируется не так, как при запуске 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() значения, это то, что я получил в результате

tmp: 12 | token trials | strcmp -81
...

1 Ответ

3 голосов
/ 26 марта 2019

Обратите внимание на

 char trial[6] = "trials";

Здесь trial[6] должно быть trial[7] для хранения не только букв, но и '\0' (конец строки)

...