C 数组行为 - 全局/局部/动态

标签 c arrays malloc dynamic-arrays calloc

我在从 while 循环全局更新数组时遇到问题,如下所述。请注意,我只能使用 C 95 及之前版本的功能。任何帮助将不胜感激!满浆箱http://pastebin.com/ss6VgTCD

在我的程序顶部声明

int data_count, i;
float *x_values, *y_values;
float x[100],y[100];

在我的主函数中,我的数组是使用以下代码创建的:

printf("\nPlease Enter How Many Data Points You Wish To Enter: \n");
scanf("%d", &data_count);
x_values=(float*)calloc(data_count,sizeof(*x_values));
y_values=(float*)calloc(data_count,sizeof(*y_values)); 
if (x_values==NULL) {
     printf("Error! Memory Could Not Be Allocated. ");
     exit(0);
}

文件读取函数导入先前输入的数据,该函数正在获取正确的数据并在我的调试行中显示正确的数据点 printf("%12f%12f\n", x_values[i], y_values[ i]); 但是,仅在本地更新 x_valuesy_values,因为程序的其余部分看不到这些导入的数据。如何全局更新数组?

     void file_read(void) {
     store = fopen ("j:/StoredValues.txt", "r");
     if (store == NULL )
              printf("\nError: Failed To Open Previous Data File - Program Will Continue Anyway\n");
     else {
              printf("\nSuccess: Data From Previous Run Imported\n");
              i=0;
              do { 
              fscanf ( store, "%f,%f\n", &x[i], &y[i]);
              x_values = x;
              y_values = y;
              printf("%12f%12f\n", x_values[i], y_values[i]);
              i=i+1;
              } while (!feof(store));
              fclose(store);
     }
}

附:我只用 C 语言编写了 2 周的代码,所以简单就好:)

最佳答案

在第一个代码块中,您分配了内存并将指向它的指针保存在“x_values”中。 在第二个 block 中,您将“x_values”更改为指向“x”数组。 “x”数组已分配有可容纳 100 个浮点值的内存。

分配后,您将不再有指向已分配内存的指针。 存储在那里的任何数据都无法再访问,因为您不再有指向它的指针。

编辑:

这里是 file_read() 例程的建议替换:

void file_read(void) {
     store = fopen ("j:/StoredValues.txt", "r");
     if (store == NULL )
              printf("\nError: Failed To Open Previous Data File - Program Will Continue Anyway\n");
     else {
            printf("\nSuccess: Data From Previous Run Imported\n");
            float* px;
            float* py;
            px = x_values;
            py = y_values;
            while (!feof(store))
            {
                fscanf ( store, "%f,%f\n", px, py);
                printf("%12f%12f\n", *px, *py );
                px++;
                py++;
            }
              fclose(store);
     }
}

编辑2:

菜单选项2将显示x_values的内容。如果 file_read() 将内容放入 x 数组中,则无法使用选项 2 显示它。您也无法将 x 数组的内容复制到 x_values,因为 x_values 尚不存在。

在尝试读入数据之前,您需要为数据创建一个存储区域。 为此,您需要存储文件中有多少个点的计数。

另请考虑:

用户输入 10 点,您为 10 点分配空间。 然后用户想要输入新的数据,想要输入12。 您现在必须使用 free() 和 alloc() 来为额外的两个获得空间。

关于C 数组行为 - 全局/局部/动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544107/

相关文章:

c - 将来自 strtok() 的 token 存储在双指针 "2d array"中

c - 用 malloc 分配的数组大小显示比预期少一

c - for 循环中的多个条件 - C

c++ - 寄存器函数指针

c - 使用 execlp() 从字符串运行 shell 命令

javascript - JSON 数组可以包含不同键/值对的对象吗?

java - 比较字符串数组

c - 在 C 中使用后增量时返回变量

javascript - 访问数组

c - 具体来说,fork() 如何处理 Linux 中 malloc() 动态分配的内存?