#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
void przesun(wchar_t buf[],int size, int val)//bez WEOF
{
for(int i=0;i<size-1;i++)
buf[i]+=val;
}
int wczytaj_buf(FILE *input, wchar_t buf[], int chunk_size)
{
int size=0;
for(int i=0;i<1000000;i++)//wczytaj do bufora
{
buf[i]=fgetwc(input);
size++;
if(buf[i]==WEOF)
break;
}
return size;
}
void wypisz_stdout(wchar_t buf[],int size)
{
for(int i=0;i<size;i++)//czytaj z bufora
{
wprintf(L"%lc:",buf[i]);
wprintf(L"%d ",buf[i]);
}
}
void wypisz_plik(FILE *output, wchar_t buf[],int size)
{
for(int i=0;i<size;i++)//czytaj z bufora
{
fwprintf(output, L"%lc:",buf[i]);
fwprintf(output, L"%d ",buf[i]);
}
}
int poczatek(FILE *input, FILE *output)
{
return 1;
}
void koniec(FILE *input, FILE *output)
{
freopen ("/dev/tty", "a", stdout);
printf("\n");
fclose(input);
fclose(output);
}
int main()
{
FILE *input;
FILE *output;
wchar_t buf[1000000];
setlocale(LC_ALL,"pl_PL.UTF8");
if((input = fopen("wej","r")) == NULL)
return 0;
if((output = fopen("wyj","w")) == NULL)
return 0;
int size=0;
for(int j=0;j<1;j++)//parser
{
size=wczytaj_buf(input,buf,10000);
przesun(buf,size,0);
wypisz_stdout(buf,size);
wypisz_plik(output,buf,size);
}
koniec(input, output);
return 1;
}
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
void przesun(wchar_t buf[],int size, int val)//bez WEOF
{
for(int i=0;i<size-1;i++)
buf[i]+=val;
}
int wczytaj_buf(FILE *input, wchar_t buf[], int chunk_size)
{
int size=0;
for(int i=0;i<1000000;i++)//wczytaj do bufora
{
buf[i]=fgetwc(input);
size++;
if(buf[i]==WEOF)
break;
}
return size;
}
void wypisz_stdout(wchar_t buf[],int size)
{
for(int i=0;i<size;i++)//czytaj z bufora
{
wprintf(L"%lc:",buf[i]);
wprintf(L"%d ",buf[i]);
}
}
void wypisz_plik(FILE *output, wchar_t buf[],int size)
{
for(int i=0;i<size;i++)//czytaj z bufora
{
fwprintf(output, L"%lc:",buf[i]);
fwprintf(output, L"%d ",buf[i]);
}
}
int poczatek(FILE *input, FILE *output)
{
setlocale(LC_ALL,"pl_PL.UTF8");
if((input = fopen("wej","r")) == NULL)
return 0;
if((output = fopen("wyj","w")) == NULL)
return 0;
return 1;
}
void koniec(FILE *input, FILE *output)
{
freopen ("/dev/tty", "a", stdout);
printf("\n");
fclose(input);
fclose(output);
}
int main()
{
FILE *input;
FILE *output;
wchar_t buf[1000000];
poczatek(input, output);
int size=0;
for(int j=0;j<1;j++)//parser
{
size=wczytaj_buf(input,buf,10000);
przesun(buf,size,0);
wypisz_stdout(buf,size);
wypisz_plik(output,buf,size);
}
koniec(input, output);
return 1;
}
Mógłby ktoś miły wytłumaczyć dlaczego kod u góry działa, podczas gdy kod na dole nie działa, w sensie kompilator ostrzega:
czytaj.c: In function ‘main’:
czytaj.c:70:2: warning: ‘input’ is used uninitialized in this function [-Wuninitialized]
poczatek(input, output);
^~~~~~~~~~~~~~~~~~~~~~~
czytaj.c:70:2: warning: ‘output’ is used uninitialized in this function [-Wuninitialized]
a program przy próbie uruchomienia wysypuje się:
Segmentation fault (core dumped)
vpiotrvpiotr