Colección de citas famosas - Slogan de motivación - Algunas preguntas sobre fread en lenguaje C

Algunas preguntas sobre fread en lenguaje C

¡La respuesta de L_o_o_n_i_e no es muy precisa!

Déjame explicarte:

Primero presenta la función fread

Función: leer datos de una secuencia

Prototipo de función: int fread(void *ptr, int size, int nitems, FILE *stream); Parámetro: dirección (puntero) utilizada para recibir datos (ptr)

Tamaño de un solo elemento (tamaño): la unidad es bytes En lugar de bits, por ejemplo, la lectura de un valor entero son 4 elementos (nitems)

El puntero del archivo (secuencia) que proporciona los datos

Valor de retorno: el número de elementos leídos correctamente

De la introducción anterior, sabemos que el primer parámetro de la función fread es una variable de puntero, que puede apuntar a cualquier tipo de parámetro real.

Volviendo al asunto, con respecto a su pregunta, s en su código es una variable de matriz de estructura Al igual que una variable de matriz ordinaria, el nombre de la matriz en sí es una constante de puntero, por lo que escribir s en la posición del búfer es No. problema.

Entonces, ¿por qué el código que lees aquí se vuelve confuso?

Aunque el código que publicaste no está completo, pero por lo que dijiste, la lectura es confusa, probablemente pueda adivinar que cuando usas la función fwrite para escribir datos en el archivo, escribes los datos uno estructura a la vez (es decir, es solo un elemento de la matriz s, que corresponde a un subíndice) y se escribe en el archivo en forma de bloque de datos. Entonces, cuando usa la función fread para leer, suponiendo que escribe s en la posición del búfer, no hay ningún problema con la sintaxis en sí, pero es equivalente a almacenar el tamaño de datos de solo un elemento de la matriz s como todos los datos de s en s, es decir, no hay correspondencia, por lo que la visualización será confusa.

Así que puedes implementarlo de dos maneras:

Método 1:

Al escribir, presiona una vez para usar el tamaño de datos de un elemento de s como uno Los bloques de datos se escriben en el archivo uno tras otro y luego se leen de la misma manera.

El código se puede escribir así:

Supongamos que el tamaño de s es: TAMAÑO_S

for(cuenta = 0; cuenta lt; TAMAÑO_S; cuenta)

fwrite(amp; s[count], sizeof(struct Student), 1, fp);

Luego al leer:

for(count = 0 ; contar lt ; TAMAÑO_S; contar )

fread(amp; s[count], sizeof(struct Student), 1, fp);

Método 2:

With El tamaño de los datos de toda la matriz s se escribe en el archivo a la vez como un bloque de datos y luego también se lee en su totalidad durante la lectura. Finalmente, se puede imprimir en un bucle.

El código se implementa de la siguiente manera:

Supongamos que el tamaño de s es: TAMAÑO_S

fwrite(s, TAMAÑO_S * tamaño de (estructura estudiante), 1, fp);

Luego al leer:

fread(s, SIZE_S * sizeof(struct Student), 1, fp);

Finalmente imprima:

for(cuenta = 0; cuenta lt; TAMAÑO_S; cuenta)

fread(amp; s[cuenta], tamañode(estructura estudiante), 1, fp);

Entiende Recuerda darle el visto bueno a tu hermano~~~ ^_^