【发布时间】:2018-03-26 22:21:33
【问题描述】:
我有这两个函数,目的是做同样的事情——从一个只有整数的文件中读取每一行并将它们存储在一个数组中:
我在 main() 函数中这样称呼它们:
StoreinArray1(X, size, f);
StoreinArray2(X, size, f);
第一个有效,但第二个无效。
第一
int StoreinArray1(int X[], int *size, char *file)
{
int i=0;
FILE *f;
f = fopen(file, "r");
X = (int*) realloc (X, *size * sizeof(int));
for (i=0;i<*size;i++)
{
fscanf(f, "%d", &X[i]);
}
return 1;
}
第二
int StoreinArray2(int X[], int *size, char *file)
{
FILE *f;
f = fopen(file, "r");
if (f == NULL)
return -1; // failed opening
*size = 0;
while (!feof(f))
{
if (fscanf(f, "%d", &X[*size]) == 1)
*size = *size + 1;
}
fclose(f);
return 1;
}
对于第一个,我使用了动态内存分配和实际计算的大小:
X = malloc(0);
while ((ch = fgetc(f)) != EOF)
{
if (ch == '\n')
lines++;
}
size = &lines;
第二次我不能这样做。我尝试时 Visual Studio Code 崩溃。
所以我尝试做*size = 0 然后StoreinArray2(X, size, f); 但它也没有工作。
所以我的问题是关于第二个功能:
它是否在扫描文件时计算大小?据说不需要使用动态内存分配(我老师说的)。
如果是这样,那么我怎样才能正确传递一些“大小”参数?作为一个指针还是一个简单的整数?
提前谢谢你!
编辑:
这是完整的 First 程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *f;
int *size=0, *X, lines=1;
char *file = {"file.txt"};
char ch;
X = malloc(0);
f = fopen(file, "r");
while ((ch = fgetc(f)) != EOF)
{
if (ch == '\n')
lines++;
}
size = &lines;
StoreinArray(X, size, file);
}
int StoreinArray(int X[], int *size, char *file)
{
int i=0;
FILE *f;
f = fopen(file, "r");
X = (int*) realloc (X, *size * sizeof(int));
for (i=0;i<*size;i++)
{
fscanf(f, "%d", &X[i]);
}
for (i=0;i<*size;i++)
printf("%d\n",X[i]);
return 1;
}
第二个:
int main()
{
int X[100];
int *size;
char *file = {"file.txt"};
*size = 0;
StoreinArray(X, size, file);
}
int StoreinArray(int X[], int *size, char *file)
{
FILE *f;
f = fopen(file, "r");
if (f == NULL)
return -1;
*size = 0;
while (!feof(f))
{
if (fscanf(f, "%d", &X[*size]) == 1)
*size = *size + 1;
}
fclose(f);
return 1;
}
首先我必须在 main 中打开文件来计算行数。我知道我忘记了 main 中的 fclose(f) 和 free(X),但是这些指令导致 VSC 崩溃。
int StoreinArray (int X[], int *size, char *file)
{
FILE *f;
int i=0;
f = fopen(file, "r");
if (f == NULL)
return -1;
*size = 0;
while (!feof(f))
{
if (fscanf(f, "%d", &X[*size]) == 1)
{
*size = *size + 1;
X = (int *) realloc (X , *size * sizeof(int));
}
}
fclose(f);
return 1;
}
int main()
{
int *X, size=0;
char *file = {"f.txt"};
X=malloc(0);
StoreinArray(X, &size, file);
free(X);
}
【问题讨论】:
-
请在发帖前检查您的问题。
-
这两个函数都有几个错误。我会说你只是很幸运其中一个没有崩溃。但是,首先,您能否展示完整的程序?不仅是这两个函数,还有调用它们的代码。
-
另外,您的真正问题是什么?您在询问一些无关紧要的微小细节,而代码中存在明显的明显错误。我猜你有一个家庭作业,你无法开始工作,需要帮助,因为程序一直在崩溃。你真正的问题是
My program keeps crashing and doesn't do what I want it to do. What is my mistake?我说得对吗?如果是这样,那么还请提供作业的全文,以便我们知道代码应该做什么。 -
只需要读取一个文件,其中每一行都是一个数字,然后将它们存储在 X 数组中。它不适用于我的老师要我们使用的功能,我不明白为什么。我用的是第一个。