Poz svima.
Imam jedan problem sa jednim programčićem iz C-a. Inače radim u Javi, i nisam baš upoznat sa C-om.
Ovo je source funkcije koja mi "šteka":
int new_cmd(wchar_t *fname) {
int argc,retc;
wchar_t outfile[MAX_PATH];
wchar_t cmd[MAX_PATH];
wchar_t infile[MAX_PATH];
FILE *h;
TCHAR buff[1024];
memset(buff,0,sizeof(buff));
// pocetak
wprintf(L"$IHIS2CMD> START\n");
// otvori
h = _wfopen(fname,L"rt");
if(h == NULL) {
wprintf(L"$IHIS2CMD> ERROR reading [%s]\n",fname);
wprintf(L"$IHIS2CMD> END\n");
return(1); //*!!! (0)
}
outfile[0] = '\0';
cmd[0] = '\0';
infile[0] = '\0';
argc = fwscanf(h,L"%s %s %s",outfile,cmd,infile);
fclose(h);
if(argc < 2) {
wprintf(L"$IHIS2CMD> WARN unable to read file [%s].\n", fname);
return(1);
}
// procitali smo parametre idemo dalje
wprintf(L"$IHIS2CMD> EXEC [%s, %s, %s] (%d) ...\n", outfile,cmd,infile,argc);
retc = appCmd(outfile, cmd, infile);
wprintf(L"$IHIS2CMD> RETURN [%s]\n", (retc == EXIT_SUCCESS ? L"OK" : L"ERR"));
// kraj
if(!DeleteFile(fname)) {
wprintf(L"$IHIS2CMD> ERROR deleting [%s]\n",fname);
wprintf(L"$IHIS2CMD> END\n");
return(1); //*!!! (0)
}
wprintf(L"$IHIS2CMD> END\n");
return(1);
}Obratite pozornost na boldani redak gdje se koristi funkcija fwscanf. Pročitao sam dokumentaciju te funkcije i piše da čita iz nekog streama u neke varijable prema zadanom formatu.
Problem je u tome da to ne radi na Windows 7 mašinama (na nekim radi, na nekima ne). U file-u iz kojeg se čitaju ti parametri (outfile, cmd, infile) uredno stoje navedeni stringovi koji se trebaju pročitati. Ono što on pročita(dakle na mašinama na kojima to NE radi), output iz command prompta:
$IHIS2CMD> START
$IHIS2CMD> EXEC [ ■C, , ] (3) ...A ono što piše u datoteci je:
C:\Temp\rez.txt GETDATA c:\temp\123456.xml
Dakle ova 3 stringa bi trebala pisati gore u onoj zagradi ( EXEC[ , , ] ), a on ih pročita krivo, kao da čita u krivom enkodingu...
Ima li netko ideju u čemu je problem?