Изменение значения, на которое указывает указатель файла внутри функции C - PullRequest
0 голосов
/ 06 августа 2011

Можно ли изменить значение, на которое указывает указатель FILE внутри функции в C, передавая по ссылке?

Вот пример, чтобы попытаться проиллюстрировать то, что я пытаюсь сделать, яМожно изменить целое число, но не указатель файла, какие-либо идеи?

int main (void)
{
    FILE* stream;
    int a = 1;
    configure_stream(rand() % 100, &a, &stream);
    return 0;
}

void configure_stream(int value, int* modifyMe, FILE* stream)
{
    *modifyMe = rand() % 100;
    if (value > 50)
    {
        *stream = stderr;
    }
    else
    {
        *stream = stdout;
    }
}

Ответы [ 3 ]

2 голосов
/ 06 августа 2011

Я думаю, что вы хотите объявить ваш configure_stream следующим образом

void configure_stream(int value, int* modifyMe, FILE** stream)
{
    *modifyMe = rand() % 100;
    if (value > 50)
    {
        *stream = stderr;
    }
    else
    {
        *stream = stdout;
    }
}

и использовать его с

configure_stream (rand ()% 100, & a, & stream)

Это получает указатель, указывающий на указатель FILE.С помощью указателя на указатель вы можете изменить указатель ФАЙЛА и не теряя его в больших джунглях памяти

2 голосов
/ 06 августа 2011

Попробуйте

void configure_stream(int value, int* modifyMe, FILE **stream)
                                                      ^
    *stream = stderr;

То, что вы пытались, было неверно:

void configure_stream(int value, int* modifyMe, FILE* stream)
    *stream  = stderr; /* Assign FILE * to FILE. */

EDIT

Вы должны назвать это: configure_stream(..., &stream);

1 голос
/ 06 августа 2011

Вы передаете configure_stream указатель на указатель FILE.Поэтому параметр должен быть объявлен как FILE **

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...