如何使用fread将char保存到我的2d数组?

时间:2017-09-19 20:06:14

标签: c

char *arr[512][lineCount];
while(lineCount > 0){       
    char *savedLine = malloc(512);
    while(1){
    fread(savedLine, 1, 1,fd);
    if(savedLine != '\n'){
        arr = savedLine;
    }else{
        break;
    }
    }lineCount --;
}

所以我正在尝试创建一个逐行存储字符的2D字符数组。 我不允许使用fgets所以我使用fread一次存储一个char,直到它达到'\n'。但它不会编译说我无法比较指针和整数(savedLine != 'n'),并且数组类型不可分配(char *arr[512][lineCount])。其余变量在我的代码中声明。

1 个答案:

答案 0 :(得分:1)

你没有2D数组的字符,你有一个2D指针数组,你永远不会为这些指针分配任何东西。但你根本不需要指针。只需声明一个train_data = [read_training_data(filename) for filename in os.listdir('gs://my-bucket/data/')] 变量并读入其地址,然后将其复制到数组中。

char

请注意,在分配给数组时,您需要从char arr[lineCount][512]; int pos = 0; while (lineCount > 0) { char tempChar; size_t n = fread(&tempChar, 1, 1, fd); if (n == 0) { // EOF or error break; } if (tempChar == '\n') { arr[lineCount-1][pos] = '\0'; // Add trailing null to current line lineCount--; // Start new line pos = 0; } else { arr[lineCount-1][pos] = tempChar; pos++; if (pos == 511) { // Filled up current line, start new line arr[lineCount-1][pos] = '\0'; lineCount--; pos = 0; } } } 中减去1,因为数组的索引编号为0到lineCount。另请注意,您已向后声明了数组。