我正在尝试获取运行此代码时要更新的值的列表,但我已经不知所措了。在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/

10-10 14:40