Red de conocimiento informático - Aprendizaje de programación - Programación en C en Linux para generar la hora cada 3 segundos y guardarla en un archivo. Hay un error al ejecutar el programa.

Programación en C en Linux para generar la hora cada 3 segundos y guardarla en un archivo. Hay un error al ejecutar el programa.

¡¡¡El tamaño de la estructura no puede considerarse simplemente como la superposición de miembros...!!!

Así que tu fprintf("%d") no significa que los datos El texto almacenado ocupa cuatro bytes y se imprime en formato decimal. Puede ser 1 byte o 5 bytes. Si fprintf ("%s"), aunque la longitud en realidad es 24 + 1 bytes, la estructura Los datos están organizados en el. el cuerpo necesita estar alineado... temp2[25] ocupa 28 bytes de memoria Debido a que es una máquina de 32 bits, los datos generalmente están alineados con cuatro bytes... Lo mismo ocurre con un byte... Ver para. usted mismo El tamaño de sizeof(struct shijian)....

fprintf("%4d")

fprintf("%28s")

Usar formato salida para garantizar Esta cadena de números decimales ocupa 4 bytes, y la cadena de este tiempo ocupa 28 bytes

Esto organiza los datos de texto en el mismo tamaño que la estructura.

Cuando depurando, vea cuántos bytes se leen... fread, puede configurar la unidad en 1, para que pueda ver cuántos bytes se leen, fread lo calculará por usted, por supuesto que puede ver Sin detalles... .

#include

#include

#include

p>

int main(int argc,char *argv[])

{

time_t timep1;

struct shijian

{

int número;

char timep2[25];

};

ARCHIVO *fp=NULL;

if ((fp=fopen("1.txt","a+"))==NULL)

{

printf("¡no se puede abrir!");

return -1;

}

estructura shijian shijian[200];

int i=1;

int rc;

while(i==1 && rc < 10000)//Si rc excede 10000, el programa volverá a salir mal... solo se dan 4 bits

{

rc=fread(shijian,sizeof(struct shijian),200,fp);

// fflush(fp);

shijian ->número= rc+1;

// shijian->número=i;

// i=rc;

tiempo(&timep1);

strcpy(shijian->timep2,ctime(&timep1));

printf("%d %s\n",shijian->número,shijian->timep2);

p>

// fwrite(q->número,tamañode(q->número),1,fp);

// fflush(fp);

fprintf ( fp,"%4d",shijian->número);fflush(fp);

fprintf(fp,"%28s",shijian->timep2);f

flux(fp);

// fwrite(shijian->timep2,sizeof(shijian->timep2),1,fp);

rebobinar(fp);

dormir(3);

// fseek(fp,0,SEEK_SET);

// (shijian->número)++;

}

fclose(fp);

devuelve 0;

}