读取逗号分隔的数字列表失败 C
Reading a comma-seperated list of numbers fails C
我有一个包含以逗号分隔的数字列表的文件。我尝试了不同的读取数据的方法,这段代码在不同的数据集上都没有问题。
输入示例(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 个值。如果我将 max-line-size 更改为例如 512,则此数字为 145。
虽然这个值应该——如果我理解正确的话——等于行的长度,在我的例子中是 ~2100 个字符。所以使用 4098 应该不是问题。
如有错误请指正
为什么我没有读取全部 600 个值,而是只读取了部分数据?
nbr 像整数计数器一样使用,但被定义为无符号字符。一个char是一个字节,unsigned byte的范围是0到255,递增超过255会导致字节溢出,return变为0。所以,目前,nbr实际上是总数处理的条目 mod 256.
我有一个包含以逗号分隔的数字列表的文件。我尝试了不同的读取数据的方法,这段代码在不同的数据集上都没有问题。
输入示例(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 个值。如果我将 max-line-size 更改为例如 512,则此数字为 145。 虽然这个值应该——如果我理解正确的话——等于行的长度,在我的例子中是 ~2100 个字符。所以使用 4098 应该不是问题。
如有错误请指正
为什么我没有读取全部 600 个值,而是只读取了部分数据?
nbr 像整数计数器一样使用,但被定义为无符号字符。一个char是一个字节,unsigned byte的范围是0到255,递增超过255会导致字节溢出,return变为0。所以,目前,nbr实际上是总数处理的条目 mod 256.