fread_s
Membaca data dari aliran. Versi fread
ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
size_t fread_s(
void *buffer,
size_t bufferSize,
size_t elementSize,
size_t count,
FILE *stream
);
Parameter
buffer
Lokasi penyimpanan untuk data.
bufferSize
Ukuran buffer tujuan dalam byte.
elementSize
Ukuran item yang akan dibaca dalam byte.
count
Jumlah maksimum item yang akan dibaca.
stream
Penunjuk ke FILE
struktur.
Nilai hasil
fread_s
mengembalikan jumlah item (keseluruhan) yang dibaca ke dalam buffer, yang mungkin kurang dari count
jika kesalahan baca atau akhir file ditemui sebelum count
tercapai. feof
Gunakan fungsi atau ferror
untuk membedakan kesalahan dari kondisi akhir file. Jika size
atau count
0, fread_s
mengembalikan 0 dan konten buffer tidak berubah. Jika stream
atau buffer
adalah penunjuk null, fread_s
memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi ini diatur errno
ke EINVAL
dan mengembalikan 0.
Untuk informasi selengkapnya tentang kode kesalahan, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Fungsi membaca fread_s
hingga count
item elementSize
byte dari input stream
dan menyimpannya di buffer
. Penunjuk file yang terkait dengan stream
(jika ada) dimajukan dengan jumlah byte fread_s
yang dibaca. Jika aliran yang diberikan dibuka dalam mode teks, pasangan umpan baris kembali pengangkutan diganti dengan karakter umpan baris tunggal. Penggantian tidak berpengaruh pada penunjuk file atau nilai pengembalian. Posisi penunjuk file tidak ditentukan jika terjadi kesalahan. Nilai item baca sebagian tidak dapat ditentukan.
Fungsi ini mengunci utas lain. Jika Anda memerlukan versi non-penguncian, gunakan _fread_nolock
.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Function | Header yang diperlukan |
---|---|
fread_s |
<stdio.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_fread_s.c
// Command line: cl /EHsc /nologo /W4 crt_fread_s.c
//
// This program opens a file that's named FREAD.OUT and
// writes characters to the file. It then tries to open
// FREAD.OUT and read in characters by using fread_s. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
#define BUFFERSIZE 30
#define DATASIZE 22
#define ELEMENTCOUNT 2
#define ELEMENTSIZE (DATASIZE/ELEMENTCOUNT)
#define FILENAME "FREAD.OUT"
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
for ( i = 0; i < DATASIZE; i++ )
list[i] = (char)('z' - i);
list[DATASIZE] = '\0'; // terminal null so we can print it
// Open file in text mode:
if( fopen_s( &stream, FILENAME, "w+t" ) == 0 )
{
// Write DATASIZE characters to stream
printf( "Contents of buffer before write/read:\n\t%s\n\n", list );
numwritten = fwrite( list, sizeof( char ), DATASIZE, stream );
printf( "Wrote %d items\n\n", numwritten );
fclose( stream );
} else {
printf( "Problem opening the file\n" );
return -1;
}
if( fopen_s( &stream, FILENAME, "r+t" ) == 0 ) {
// Attempt to read in characters in 2 blocks of 11
numread = fread_s( list, BUFFERSIZE, ELEMENTSIZE, ELEMENTCOUNT, stream );
printf( "Number of %d-byte elements read = %d\n\n", ELEMENTSIZE, numread );
printf( "Contents of buffer after write/read:\n\t%s\n", list );
fclose( stream );
} else {
printf( "File could not be opened\n" );
return -1;
}
}
Contents of buffer before write/read:
zyxwvutsrqponmlkjihgfe
Wrote 22 items
Number of 11-byte elements read = 2
Contents of buffer after write/read:
zyxwvutsrqponmlkjihgfe
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk