我正在创建一个用于将文件中的数字读入数组的函数。但是从函数返回后,似乎丢失了最后一个值。这是我的代码:
void loadDataset(int* dataSet, int DataSetSize, char *filename) {
FILE *fp;
fp = fopen( filename , "r" );
for(int i=0; i< DataSetSize; i++){
fscanf(fp, "%d", &dataSet[sizeof(int) * i]);
}
for (int i = 0; i < DataSetSize; i++) {
printf("%d\n", dataSet[sizeof(int) * i]);
}
fclose(fp);
}
int main(int argc, char *argv[]) {
...
int* ds = malloc(sizeof(int) * DataSetSize);
loadDataset(ds, DataSetSize, DatasetFilename);
for (int i = 0; i < DataSetSize; i++) {
printf("%d\n", ds[sizeof(int) * i]);
}
...
}
我正在测试的文件包含1到6之间的数字。在功能loadDataset
中,打印结果为
1
2
3
4
5
6
但是回到main
功能时,打印结果是
1
2
3
4
5
0
可能是什么问题?
很抱歉,如果我不愿意这样做,但我对用C编程不是很熟悉。
答案 0 :(得分:5)
此表达式
fscanf(fp, "%d", &dataSet[sizeof(int) * i]);
^^^^^^^^^^^^^^^
没有道理。使用这种表达式的结果是程序具有未定义的行为,因为尝试访问分配的数组之外的内存。
改为使用
fscanf(fp, "%d", &dataSet[i]);
或
fscanf(fp, "%d", dataSet + i);