Jump to content
mile95

Problema C Fisiere binare

Recommended Posts

/*Cerinta:Sa se citeasca de la tastatura numele unui fisier binar si un text. Sa se creeze fisirul dupa numele dat si poi sa se intratora textul in el*/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <conio.h>

#include<string.h>

void main()

{

FILE *f;

char fnume[10];

char continut[100];

int poz;

printf("Introduceti numele fisierului:"); gets(fnume);

printf("Introduceti textul pe care il doriti introdus in fisier: "); gets(continut);

errno_t err;

err = fopen_s(&f, fnume, "w");

for (int i = 0; i < strlen(continut); i++)

{

printf("%c", continut);

fwrite(&continut, sizeof(int), 1, f);

}

fclose(f);

_getch;

}

/* Problema merge dar textul introdus in fisier este scris in Chineza. Am folosit " printf("%c", continut); " doar ca sa vad daca textul ii memorat corect si este. Ce am gresit de ii scris in Chineza ? */

Link to comment
Share on other sites

Salut, problema ta e relativ simpla.

Functia fwrite are urmatoarea semnatura:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Tu ca si marime, trimiti marimea unui int(care e mai mare decat un char).

Asta inseamna ca pentru fiecare caracter tu defapt scrii mai mult.

Exemplu:

Input : ala bala porto cala;

tu citesti a, dar scrii in fisier al sau ala sau eu stiu, mai mult, pentru ca atunci cand spui size(int) ii spui citeste primi x bytes.

Schimba din fwrite(&continut, sizeof(int), 1, f); in fwrite(&continut, sizeof(char), 1, f); si ai sa vezi ca functioneaza perfect.

Link to comment
Share on other sites

Salut, problema ta e relativ simpla.

Functia fwrite are urmatoarea semnatura:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Tu ca si marime, trimiti marimea unui int(care e mai mare decat un char).

Asta inseamna ca pentru fiecare caracter tu defapt scrii mai mult.

Exemplu:

Input : ala bala porto cala;

tu citesti a, dar scrii in fisier al sau ala sau eu stiu, mai mult, pentru ca atunci cand spui size(int) ii spui citeste primi x bytes.

Schimba din fwrite(&continut, sizeof(int), 1, f); in fwrite(&continut, sizeof(char), 1, f); si ai sa vezi ca functioneaza perfect.

oooh acum am vazut si eu int in loop, eu m-am oprit la gets() ca nu-mi place.

Link to comment
Share on other sites

ti-am lasat in comentarii si functia de afisare pe ecran, sa vezi ca a functionat cum trebuie


/*Cerinta:Sa se citeasca de la tastatura numele unui fisier binar si un text. Sa se creeze fisirul dupa numele dat si poi sa se intratora textul in el*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void verific (FILE *f)
{
if(f == NULL)
{
printf("Eroare fisier.");
exit(EXIT_FAILURE);
}
}

int main()
{
char nume_binar[30];
char sir[100];

printf("Nume fisier binar: [exemplu.dat] ");
gets(nume_binar);

FILE *f=fopen(nume_binar,"wt");
verific(f);
int n,i=0;
printf("Citesc sir, sirul de incheie cu enter \n");
gets(sir);
fwrite(&sir[i++],sizeof(char),strlen(sir),f);
fclose(f);
return 0;

}


/*

int main()
{
char nume_binar[30];
char sir[100];

printf("Nume fisier binar: [exemplu.dat] ");
gets(nume_binar);
FILE *g=fopen(nume_binar,"rt");
verific(g);
int n,i=0;

fseek(g,0L,2); //ma pozitionez la sfarsitul fisierului
n=ftell(g)/sizeof(char); //ftell returneaza pozitia curenta a cursorului (care este la sfarsit) dar o impart la numarul de octeti necesari unui caracter, sa determin dimensiunea sirului
fseek(g,0L,0); //// ma pozitionez la inceputul fisierului

fread(&sir[i++],sizeof(char),n,g);
puts(sir);

fclose(g);
return 0;

}

*/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...