c - 如何在函数中调用文件指针

标签 c arrays function-calls

我需要扫描文件中的字母以形成乱序的单词。一切看起来都不错,但调试器不执行该命令。任何建议将不胜感激。

代码:

void playGame(char array1[SIZE], FILE*aPtr)    
{

    aPtr = fopen("words.txt", "r");
    int i;
    for (i = 0; i < SIZE; i++){
        fscanf(aPtr, " %c", array1[i]);
        printf("%c", array1[i]);
    }
}

这是我在 main 中调用函数的方式

playGame(&scramble[SIZE], inPtr);

数组 scramble[] 被声明为 FILE*inPtr,此外,SIZE 定义为 10。

最佳答案

在您的调用代码中,您有:

FILE *fp = 0;
char game[SIZE];

假设您在函数中打开文件,但没有关闭它,您需要在函数中更改文件,因此调用可能是:

playGame(game, &fp);
if (fp != 0)
    fclose(fp);

但是函数应该改为:

void playGame(char array1[SIZE], FILE **aPtr)    
{
    FILE *fp = fopen("words.txt", "r");
    if (fp != 0)
    {
        *aPtr = fp;
        ...other code...
    }
}

或者,应该在调用代码中打开和关闭文件,并将文件指针简单地传递给 playGame():

FILE *fp = fopen("words.txt", "r");
if (fp != 0)
{
    playGame(game, fp);
    fclose(fp);
}

使用此接口(interface),playGame() 中没有 fopen()(或 fclose())调用,这会保持其当前状态接口(interface)(void playGame(char game[SIZE], FILE *fp))。这更有意义。通常,打开文件的函数也负责关闭文件是正确的。也有异常(exception),但并不是全部。

关于c - 如何在函数中调用文件指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22823926/

相关文章:

php - 展开数组并删除前缀

Java - 带有数组字段的枚举

javascript - 尝试在代码执行中添加延迟(在警报发生之前)

python - 当局部变量名称与函数参数名称相同时将关键字参数传递给函数

javascript - 如何从对象内部调用函数

c - 在结构体中使用指向结构体数组的指针

c++ - 可变参数列表中有哪些类型的默认提升?

php - 在 PHP 中向排序数组中插入元素有哪些更好的方法

c - 如何在C程序中获取当前目录?

c++ - typedef 声明中的 typedef-name 是可选的吗?