я хотел бы спросить, почему это возможно изменить значение указателя файла в функции C без прохождения ссылки на него, что я имею в виду:изменение файла указатель внутри функции C
void fun(FILE *f)
{
fclose(f);
f = fopen("newfile", "r");
}
int main(void)
{
FILE *old = fopen("file", "r");
char *msg = (char*)malloc(sizeof(char) * 100);
fun(old);
fscanf(old, "%s", msg);
printf("%s", msg);
free(msg);
return 0;
}
Может кто-нибудь объясните это мне? Я думал, что указатели копируются, поэтому я ожидал получить сообщение об закрытом файле. Удивительно, но я этого не понял.
Стандартное предупреждение: Пожалуйста, [не использовать] (http://stackoverflow.com/q/605845/2173917) возвращаемое значение 'malloc()' и family. –
@SouravGhosh С тех пор, когда вы не лишили void * к типу, вам нужно стать хорошей практикой? – BitTickler
@ user2225104 Ликвидация возвращаемого значения, например. 'malloc' может скрывать предупреждения, заданные, когда' malloc' не были надлежащим образом прототипированы (например, когда программист забыл включить '') –