c - 读取逗号分隔的数字列表失败 C

标签 c fopen

我有一个包含以逗号分隔的数字列表的文件。我尝试了不同的读取数据的方法,这段代码在不同的数据集上都没有问题。

例如输入(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是一个字节,一个无符号字节的范围是0到255。递增超过255会导致字节溢出并返回值0。所以,目前,nbr实际上是处理的条目总数mod 256 .

关于c - 读取逗号分隔的数字列表失败 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52909311/

相关文章:

c - 如何确定嵌入式系统 C 上正在使用的内存?

c - 关于整数格式转换

c - 我要求澄清有关 C 中的 '' 未通过引用传递''

php - 不使用 fclose() 覆盖文件句柄会产生缺陷吗?

c - 在 C 中调试 fopen

c - '没有这样的文件或目录。'但文件在那里

c - 将输入文件传递给 C 中的输出文件?

c - 在不修改参数的情况下将指针传递给函数?

使用不同模式下的文件进行 C 编程?

C - 使用 getchar 而不是 fgets 作为标准输入