【发布时间】:2014-09-10 20:51:27
【问题描述】:
我正在尝试从文本文件中扫描数据列表,并且该数据应该放入 double 类型的数组中,这必须在 main 之外的函数中完成。因此指针需要指向main中的数组,从函数实际扫描数据到数组中。
当我试图让函数通过指针返回数组时出现问题(假设原型已经存在):
#include <stdio.h>
#include <stdlib.h>
#define SIZE 12
int
main(void)
{
double data[SIZE];
int i;
readData(data, SIZE);
}
void
readData(double data[], int SIZE)
{
FILE* fp;
fp = fopen("data.txt", "r");
int i;
for (i = 0; i < SIZE; i++)
{
fscanf(read, "%lf", &data[i]);
if(data[i] < 0)
printf("Negative data at %d\n", i);
}
printf("The array is: ");
for (i = 0; i < SIZE; i++)
{
printf("%f ", data[i]);
}
fclose(fp);
return;
}
这只是给我一个运行时错误和崩溃,根本没有编译错误。我猜这是因为 fscanf 正在尝试写入 &*data[CONST] 但我不知道如何让它写入指针,而不仅仅是一个局部变量。
将文件输入获取到函数指针中是否有一些技巧?
【问题讨论】:
-
readData(&data[CONST]) 正在调用读取数据,其中包含指向数组最后一个元素之外的内存的指针。您需要更加熟悉数组在 C 中的工作方式。
-
崩溃的最可能原因(我写这篇文章时显示的代码!)是文件无法打开。做
if (fp == NULL) return;或类似的,在进入循环之前。你也应该在阅读后关闭fp,如果它确实打开了;并且您应该检查fscanf是否失败(如果它不返回1则它无法读取,因此您的程序将继续从data[i]中读取垃圾,可能导致崩溃)。 -
你还需要
#include <stdio.h>,并且展示一个完整的程序会很有用(即包括你对size的定义)。 -
我已经定义了#include
和 ,为了完整起见,我会将它们添加到上面,到目前为止,我只是在讨论基础知识,我'我回去为文件失败添加错误消息并阅读其中的一部分,但感谢提供更快的方法的信息! -
大概
fscanf(read应该是fscanf(fp。检查给您问题的代码实际上是您发布的 exact 代码(最好是复制粘贴)
标签: c arrays file pointers input