У меня есть файл, содержащий список чисел, разделенных запятыми.Я пробовал разные методы чтения данных, и этот фрагмент кода работал без проблем на разных наборах данных.
Например, ввод (600 значений): https://pastebin.com/AHJ5UpEu
#include <stdio.h>
#include <stdint.h>
#include <malloc.h>
#include <mem.h>
#define READ "r"
#define MAX_LINE_SIZE 4096
#define DATA_DELIMITER ","
unsigned char *readInput(const char *filename, size_t inputs) {
unsigned char *input = malloc(sizeof(unsigned char) * inputs);
unsigned char nbr;
const char *token;
int i;
FILE *inputPtr = fopen(filename, READ);
char line[MAX_LINE_SIZE];
while (fgets(line, MAX_LINE_SIZE, inputPtr)) {
nbr = 0;
for (token = strtok(line, DATA_DELIMITER); token && *token; token = strtok(NULL, ",\n")) {
input[nbr] = (unsigned char) atoi(token);
nbr++;
}
break;
}
fclose(inputPtr);
if(nbr != inputs){
printf("Error, did not read all files. Only read %d\n",nbr);
exit(-1);
}
exit(0);
}
int main() {
unsigned char *d = readInput("../traces/inputs.dat", 600);
free(d);
exit(0);
}
Хотя это толькочитает первые 88 значений.Если я изменю максимальный размер строки, например, на 512, то это число будет 145. Хотя значение должно - если я правильно понимаю - равным длине строки, в моем случае ~ 2100 символов.Таким образом, использование 4098 не должно быть проблемой.
Пожалуйста, исправьте меня, если я ошибаюсь.
Почему я не читаю не все 600 значений, а только части данных?