При чтении документации для fread
here объясняется, что два аргумента после void *ptr
умножаются вместе для определения количества байтов, которые читаются/записываются в файл. Ниже приведен заголовок функции для fread
приведены по ссылке:Значимость двух аргументов в fread?
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
Мой вопрос, кроме возвращаемого значения из функции, есть на самом деле разница поведения или производительности между вызовом каждой из них:
// assume arr is an int[SOME_LARGE_NUMBER] and fp is a FILE*
fread(arr, sizeof(arr), 1, fp);
fread(arr, sizeof(arr)/sizeof(int), sizeof(int), fp);
fread(arr, sizeof(int), sizeof(arr)/sizeof(int), fp);
fread(arr, 1, sizeof(arr), fp);
И какой из них обычно будет лучшей практикой? Или более общий вопрос: как я могу решить, что указать для каждого аргумента в любом данном сценарии?
EDIT
Чтобы уточнить, я не прошу для обоснования двух аргументов вместо одного, я прошу общий подход на принятие решения, что перейти к аргументам в любом сценарии. И this answer, что Массимилиано, связанный в комментариях и цитируемый, содержит только два конкретных примера и недостаточно объясняет, почему это происходит.
* Поведение * отличается, но поскольку вы не проверяете наличие ошибок, вы не можете его увидеть. * Производительность * зависит от конкретной используемой библиотеки. В отмеченной как дублируется заявляется, что «fread внутренне работает через« fputc », что, возможно, было истинным изначально, но с которым трудно поверить, чтобы держаться в 21 веке. – usr2564301
Затем взгляните на второй ответ по ссылке;) – Massimiliano
@ Массимилиано, который определяет только два особых случая, и, как отмечали комментаторы, этот ответ мог бы значительно улучшить. –