因此我從文本文件中加載浮線行並將它們存儲在指針數組中,然後將其保存迴文本文件並添加對其大小的引用。文本文件中值的數量有所不同,因此數組必須是動態的。我像這樣定義了我的主指針數組。指針數組內容被擦除時傳遞給C函數
size_t size = (int)100 * sizeof(float);
float * val = malloc(size);
我把指針數組傳遞給加載文本文件,並保存值吧,這樣的功能。
//Read file into array.
int readFile(float *val, int size) {
char buf[20] = { 0 };
val[0] = 0;
double temp = 0;
int i = 1;
FILE *file;
file = fopen("C:\\Users\\MoldOffice\\Dropbox\\VS\\finalproj\\ecgproject\\dataStream", "r");
if (!file) {
printf("Coulding find file.\n");
exit(1);
}
while (fgets(buf, 20, file) != NULL) {
temp = atof(buf);
if (temp != 0) {
// Increment i to find the size of the useful data.
val[i] = temp;
//printf("%d",val[i]);
i++;
if (i == size/sizeof(float)) {
size += 100*sizeof(float);
double* val_temp = realloc(val, size);
if (val_temp == NULL) {
printf("Realloc failed.\n");
}
else {
val = val_temp;
}
}
}
}
//Test that the array is readable.
for (int i = 0; i < 5; i++) printf("val[%d]=%f\n", i, val[i]);
return(i);
fclose(file);
這工作正常,當我打印主指針數組的內容時,它的工作原理。然後,我將相同的指針數組傳遞給另一個將數組保存到一個新的文本文件中的函數,以及第一行的大小,問題是當我第二次傳遞指針數組時,內容發生了變化0與一些隨機數)。我完全不知道爲什麼會發生這種情況..任何想法?寫入文件的功能是在這裏:
// Write file into array.
void writeFile(float *val,int size) {
printf("%d",sizeof(val));
FILE *file;
int sampleNum;
char buf[10];
file = fopen("sampleNum.txt", "r");
if (file == NULL) { sampleNum = 0; }
else { fscanf(file, "%d", &sampleNum); printf("%d",sampleNum);}
char fileString[10];
sprintf(fileString,"sample%d\0", sampleNum);
file = fopen(fileString, "w");
//Test that the array is readable.
for (int i = 0; i < 5; i++) printf("val[%d]=%f\n", i, val[i]);
//Print the array to a text file and save.
fprintf(file, "%d\n", size);
for (int i = 1; i < size; i++) {
fprintf(file, "%f\n", val[i]);
printf("%f\n", val[i]); }
fclose(file);
}
主要的其餘部分可以在這裏找到:
int main() {
size_t size = (int)100 * sizeof(float);
float * val = malloc(size);
// Read the data into an array.
int arraySize = readFile(val, size);
//Test that the array is readable.
for (int i = 0; i < 5; i++) printf("val[%d]=%f\n", i, val[i]);
// Save the array to a text file, with the size of the array as the first element.
writeFile(val,arraySize);
}
請把這個簡化爲[最小測試用例](http://stackoverflow.com/help/mcve)。例如,如果問題涉及調用函數,那麼將數據寫入文件的代碼可能無關緊要。 –
搜索並閱讀關於*模擬c * –
中引用的傳遞將現在這樣做。 –