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]
)。其余变量在我的代码中声明。
答案 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
。另请注意,您已向后声明了数组。