C: мне нужно извлечь некоторые данные из текстового файла, и он продолжает выдавать ошибку из-за ошибки сегментации - PullRequest
0 голосов
/ 20 апреля 2020

Я написал этот код в C:

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

struct Values{
    char timestamp[21];
    int temperature;
};

char *readString(char out[], FILE *fp){// Reading and storing the input values, out = the string that this func returns
    int ch, i;
    while(EOF!=(ch=fgetc(fp)))
        if(ch == '"') break;

    for(i=0;EOF!=(ch=fgetc(fp));++i){
        if(ch == '"') break;
        out[i] = ch;
    }
    out[i]='\0';
    return out;
}

void printValues(struct Values values[], int i){ //just a printing method, for printing the values, i = the amount of values I have
    int j;
    for(j=0; j<i; j++){
        puts(values[j].timestamp);
    }
}

int main(void){ //The beginning of the programm, what did you expect?
    struct Values values[10];
    FILE *file = fopen("hum1.txt", "r" );
    int i=0; //the number of every stored value

    if (file != NULL ){
        char tempString [25];
        while(*readString(tempString, file)){ //if the readStrinf outputs "" == "/0" (end of FILE)
            strcpy(values[i].timestamp, tempString);
            i++;
        }
        fclose(file);
    }

    printValues(values, i);

    return 0;
}

Мой тестовый txt-файл работает нормально. Тестирование txt:

{"Something": "Something else", "Something else else"}
{"Hey": "Is anyone there?"}
{"Something else else else"}

Но когда я пытаюсь прочитать данные из "правильного" текстового файла, он возвращает мне ошибку сегментации

"правильный" txt файл выглядит примерно так:

{"2014-02-13T06:20:00": "93", "2014-02-13T13:50:00": "66", "2014-02-13T06:00:00": "91"}
{"2014-02-14T04:50:00": "87", "2014-02-14T09:50:00": "87", "2014-02-14T12:20:00": "81"}

С несколькими строками (в этом формате) и большим количеством данных в нем

Может ли кто-нибудь мне помочь? Я не знаю, почему это происходит,

Заранее спасибо.

Также. Я забыл упомянуть, что программа 1.читает файл с именем: hum1.txt. Затем ищет первое '' 'и до следующего' '' хранит данные между ними в массиве struct

1 Ответ

0 голосов
/ 21 апреля 2020
struct Values values[10];

Вы выделяете пространство для 10 значений.

{"2014-02-13T06: 20: 00": "93", "2014-02-13T13: 50: 00" : "66", "2014-02-13T06: 00: 00": "91"}
{"2014-02-14T04: 50: 00": "87", "2014-02-14T09: 50: 00 ":" 87 "," 2014-02-14T12: 20: 00 ":" 81 "}

Ваш файл имеет 12 значений.

Первое, что вы должны сделать при отладке кода, подобного этому, добавляются проверки, чтобы увидеть, есть ли какие-либо обращения за пределы. Это сразу же уловило бы проблему.

...