[ feniks-sd @ 04.06.2009. 16:30 ] @
Imam jedan program napisan na linuxu pa ga prabacujem na win. U tome imam nekih problema koje ne znam sam riješiti.
U prvom slučaju program se noramlno kompajlira dok na win QT prijavljuje neke greške.

Code:


void ASCIIonly(char *text)
{
    for (int i=0; i<strlen(text); i++)  // u ovoj liniji detektirana greška
    {
        if ((unsigned char)text[i]<32 || (unsigned char)text[i]>126)    //not printable ASCII
        {
            //terminating the string
            text[i] = 0;
            break;
        }
    }
}



Greška koja se prijavljuje : comparison between signed and unsigned integer expressions

Ima li netko ideju kako da to riješim.
[ Mihajlo Cvetanović @ 04.06.2009. 16:56 ] @
Zameni int sa size_t, to je valjda povratna vrednost funkcije strlen.

Uzgred, bolje je da u for petlji imesto uslova i < strlen(text) staviš text[i ] != '\0', jer nema potrebe da se strlen izvršava u svakoj iteraciji.
[ Goran Arandjelovic @ 04.06.2009. 17:19 ] @
To bi trebalo da je samo warning i to u većini slučajeva bezopasan, ali Mihajlo ti reče šta da uradiš.
size_t je obično definisan kao unsigned int.

Inače, za mene je nova informacija da C++ "ne radi" na Windowsu...
[ feniks-sd @ 04.06.2009. 20:08 ] @
Malo je naslov nezgodno sročen, ali ipak mi je pomoglo. Međutim pojavio se još jedan problem. Kako se ovo može drugačije riješiti.

Code:
 MD5((unsigned char*)user_magic, strlen(user_magic), key); 


Ovaj dio je izvađen iz ovoga konteksta .

Code:
   static const char magic_string [] = "283i4jfkai3389";    // :)
        unsigned char key[MD5_DIGEST_LENGTH];
        char user_magic[200];
        strcpy(user_magic, szUserName);
        strcat(user_magic, magic_string);
       MD5((unsigned char*)user_magic, strlen(user_magic), key);
..
..


A pojavi se ova greška : C:/Qt/qt/QT_apl/criptold2/main.cpp: undefined reference to `MD5'
[ Mihajlo Cvetanović @ 04.06.2009. 21:33 ] @
Malo je čudno da ti ništa na javlja za MD5_DIGEST_LENGTH, nego samo za MD5. U svakom slučaju treba da uključiš neki heder sa #include, možda upravo #include "md5.h", ili nešto slično. Taj heder ne ide uz C kompajler, moraš ti da ga obezbediš, najčešće zajedno sa .c, ili .lib, ili .dll, koji ide uz taj heder.

Moram da pitam, kako to da C znaš na nivou apsolutnog početnika, a s druge strane se baviš kriptografijom?
[ feniks-sd @ 04.06.2009. 21:51 ] @
Citat:
Mihajlo Cvetanović: Malo je čudno da ti ništa na javlja za MD5_DIGEST_LENGTH, nego samo za MD5. U svakom slučaju treba da uključiš neki heder sa #include, možda upravo #include "md5.h", ili nešto slično. Taj heder ne ide uz C kompajler, moraš ti da ga obezbediš, najčešće zajedno sa .c, ili .lib, ili .dll, koji ide uz taj heder.


Postoji lib "md5.h" koji je uključen u kod inače bi kompajler prijavio grešku ranije.

Citat:

Moram da pitam, kako to da C znaš na nivou apsolutnog početnika, a s druge strane se baviš kriptografijom?


Cijeli taj kod radi na ubuntu linux na kojem je i nastao osim dijela o kriptografiji koji je ranije napisan od nepoznatoga autora kao teoretska rješenja. Kada to nebi radilo na linuxu, posumnjao bi da je u tome problem. Jedino što mi pada da su neke stvari drugačije riješene na linuxu što se tiće samog lib za openssl/md5. Nažalost u tom imam premalo iskustva da bi sam to mogao i otkriti.

[ Mihajlo Cvetanović @ 04.06.2009. 23:25 ] @
Malo sam guglao sa "undefined reference to `MD5'" i izgleda da se to odnosi na fazu linkovanja, a ne kompajliranja. Kako ti to bilduješ, kojom komandnom linijom? Probaj i ti malo da potražiš to na guglu, možda nađeš nešto korisno.
[ deerbeer @ 05.06.2009. 09:00 ] @
Ako ti treba MD5 za Win pogledaj zip u spajalici :
Ubacis md5.h i md5.cpp u projekat i koristis f-je :
Code:
 
char* PrintMD5(uchar md5Digest[16]);
char* MD5String(char* szString);
char* MD5File(char* szFilename);