Permalänk

Namnlös irc-client färdig.

http://www.sweclockers.com/forum/showthread.php?s=&threadid=9...

Där behövde jag ju hjälp men tänkte att jag nu tänkte visa upp slutprodukten, eller ja, den är nästan klar. Visade sig att jag hade gott om tid före deadline för projektet så jag kommer pilla på det ett tag till med förbättringar.

Källkod:
http://upload.landslide.nu/upl/Admin/nonameIRC_sauce.rar

Binär: http://upload.landslide.nu/upl/Admin/noname_IRC.exe

Så om ni orkar kolla så kommentera gärna min fulkod, ge förslag på förbättringar osv... Och om ni inte byter till den från standardklienten, så hoppas jag iaf att ni lär er något från källkoden.

=edit=

Ingen annan än jag verkar kunna köra programmet när jag kompilerar med Visual studio 2008, men funkar bra när jag gör det med Dev-CPP någon som har någon aning om vad felet kan vara?

Visa signatur

Asus Maximus II formula, E8400 @ 3.9GHz, 4GB Dominator DDR2, Radeon HD4850.

Permalänk
Medlem

Re: Namnlös irc-client färdig.

Citat:

Ursprungligen inskrivet av SwedishPshyco
Ingen annan än jag verkar kunna köra programmet när jag kompilerar med Visual studio 2008, men funkar bra när jag gör det med Dev-CPP någon som har någon aning om vad felet kan vara?

Jag har inte suttit i Visual Studio-miljö på ett långt tag, men jag tycker mig minnas att debug-runtime-miljön saknas som standard. Kompilerar du med debug- eller release-inställningar?

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem

Re: Namnlös irc-client färdig.

Citat:

Ursprungligen inskrivet av SwedishPshyco
Så om ni orkar kolla så kommentera gärna min fulkod, ge förslag på förbättringar osv... Och om ni inte byter till den från standardklienten, så hoppas jag iaf att ni lär er något från källkoden.

Jag har inte testat programmet då jag sitter i Linux, men jag har kollat lite på källkoden. Några kommentarer:

* För att vara C++ är koden väldigt C. Förutom att filerna heter *.cpp och att det finns en cSocket-klass (och även en cUser-klass, men den ser mer ut som en C-style struct) skulle jag inte ha trott att det var C++ (och jag lutar fortfarande åt att det är "C with a class"; en variant på det lite vanligare "C with classes"). Men i resten av texten antar jag att tanken är att det ska vara C-style, så jag skippar att nämna C++-idiom och dylikt.

* Du har lite blandad intentering: på vissa ställen tab och andra ställen spaces. Det finns även några ställen där indenteringen inte är lika djup som den borde vara (missad indentering).

* De flesta av dina funktioner (där det är relevant) tar en char-array av fix storlek som argument. Bättre vore att ta ett extra argument för att säga hur lång en buffer är, och låta buffer-argumentet bara vara en char-pekare. Denna pekare kan gärna vara const (const char *) för att signalera att funktionen inte kommer att förändra inputsträngen. cConsol::addText gör nästan rätt, men har fix storlek på input-argumentet (och det är inte const).

* När du bygger strängar genom sprintf finns risk för buffer overflow. snprintf vore lite säkrare. Kolla gärna returvärdet för att vara säker på att hela strängen rymdes. Är returvärdet större än eller lika med bufferstorleken fanns det inte plats för allt den ville skriva. Det går eventuellt att acceptera att inte hela den önskade strängen kunde skrivas, beroende på sammanhang, men buffer overflow bör undvikas.

* Du använder gets för att hämta input. Denna tar ingen storleksgräns som argument, och är därför osäker. fgets vore ett bättre val.

** Då gäller fortfarande att en inskriven rad kan vara längre än 255 tecken (inputs storlek minus ett). Vill du ha kvar begränsningen på 255 tecken borde du i alla fall kolla så användarens "entertryckning" ryms i buffern, och i annat fall ge ett felmeddelande. Du hanterar annars eventuellt bara en del av raden som användaren skrev in.

* I cSocket::getData kollar du så recv lyckades, men du har ingen felhantering för det fall där det inte lyckades. Ett felmeddelande kan man önska sig. Detta kan gälla på fler platser.

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem

Det är inte helt enkelt så att något visual studio c++ runtime som behövs? ska spana in det och se, verkar måttligt intressant

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk

Jag är en C kodare i botten men försöker transitionera mig till C++ det ser man i koden som du säger.

Vad gäller felhantering och bufferoverflows så är jag mkt väl medveten om det. Sprintf har blivit en dålig ovana och angående felhantering, ja det är bara lathet, dels för VS lägger till exception handling till programmet, och för att jag använder debbugern flitigt.

Ska börja bli nogrannare med att deklarera konstanter rätt och använda de mer säkra funktionerna för inmatning. Tack för kommentarerna!

Visa signatur

Asus Maximus II formula, E8400 @ 3.9GHz, 4GB Dominator DDR2, Radeon HD4850.