我正在尝试获取运行此代码时要更新的值的列表,但我已经不知所措了。在readFile()函数中,输出是正确的,但是,在PY2014的main()函数中,该输出是错误的,我无法弄清原因。
#include <stdio.h>
#include <stdlib.h>
void readFile(char *myFile, int *firstYear, int *secondYear,
int *thirdYear, int PY2014[]) {
int firstThree[3];
int i = 0;
FILE *fp = fopen(myFile, "r");
for (i = 0; i < 3; i++ ) {
fscanf(fp, "%d", &firstThree[i]);
}
*firstYear = firstThree[0];
*secondYear = firstThree[1];
*thirdYear = firstThree[2];
PY2014 = (int*)calloc(*firstYear, sizeof(int));
for (i = 0; i < firstThree[0]; i++) {
fscanf(fp, "%d", (PY2014 + i));
}
for (i = 0; i < *firstYear; i++) {
printf("PY2014 Function: %d\n", PY2014[i]);
}
fclose(fp);
}
int main(int argc, char *argv[]) {
int init1 = 2, init2 = 3, init3 = 4, init4[10];
int *firstYear = &init1;
int *secondYear = &init2;
int *thirdYear = &init3;
int *PY2014 = init4;
readFile(argv[2], firstYear, secondYear, thirdYear, PY2014);
printf("firstYear : %d\n", *firstYear);
printf("secondYear : %d\n", *secondYear);
printf("thirdYear : %d\n", *thirdYear);
for (int i = 0; i < *firstYear; i++) {
printf("PY2014: %d\n", *(PY2014+i));
}
}
我给它的输入文件是一个整数列表,每个整数之间用newLine分隔。例如,如果.txt文件包含
8
15
15
59
154
266
435
267
-5
21
269
该代码应读取PY2014中前三个值后的最后8个值。当我当前运行它时,readFile中的打印循环获取正确的数字,但是当在main()中调用该循环时,它仅为零。
感谢您的任何帮助!
最佳答案
总体来说,代码很混乱,但是导致您出现问题的是传递给readFile的变量PY2014
的范围:
该函数正在获取一个指针,您可以更改它指向的数据,但不能更改指针本身(它在函数外部无效)。
在PY2014 = (int*)calloc(*firstYear, sizeof(int));
行和for循环中
for (i = 0; i < firstThree[0]; i++) {
fscanf(fp, "%d", (PY2014 + i));
}
您正在使用
PY2014
作为局部变量,因此它在函数内部可以正常运行,但在外部不能正常运行。关于c - 指针不持有C中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47614982/