Probleem is opgelost... Had eerst mn struct maar eens even in C++ geschreven in plaats van die windows meuk met byte enzo en daar hadden ze arrays dus dacht nou dat kan dan ook wel in 1 variabele maar dat kan dus niet XDquote:Op donderdag 26 augustus 2010 16:18 schreef Cruise.Elroy het volgende:
[..]
Gebruik je nog steeds << ? Want die moet je dus _niet_ gebruiken voor dit soort dingen
edit: ik zie dat je hele grote getallen krijgt, dus je bent niet byte voor byte binair aan het lezen. Dat moet je wel doen aangezien een BMP/ICO file vol zit met binaire troep.
Gooi dat getal er eens in HEX uit, misschien iets van 0xFFFF of 0x8000: een of andere errorwaarde.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for(int i = 0; i < argc; i++){ // tijdelijk std::cout << argv[i] << '\n'; } if(argc > 1){ if(argc == 2){ if(argv[1] == "/?"){ std::cout << '\n' << argv[0] << " [bitmap 1] etc. \n\n"; std::cout << "[bitmap] File location of a bitmap (*.bmp)\n"; std::cout << "/? Program help\n"; } } return 0; } |
1 2 | /? |
umja dat klopte idd ook niet maar het is niet de oplossing ik compile overigens met g++ niet dat dat uit zou moeten maken maar tochquote:
1 |
1 2 3 4 5 6 7 8 | { for (int x = 0; str1[x] != 0 || str2[x] != 0; x++) { if (str1[x] != str2[x]) return false; } return true; } |
Dit klinkt idd logisch had ik zelf nog niet aan gedachtquote:Op zaterdag 28 augustus 2010 13:44 schreef Cruise.Elroy het volgende:
netolk, je bent bekend met de string-zero opslag in C++ neem ik aan?
Een string sla je dus op als een reeks char's, en je point dan naar het begin van de string. het einde van de string wordt aangegeven met een nul (als character kan je het schrijven als '\0')
Als je dus twee strings wilt vergelijken moet je dus het volgende doen:
[ code verwijderd ]
deze lus loopt de beide strings af totdat er een verschil wordt gevonden, of totdat ze beide tegelijk aflopen. Oh en deze methode is niet optimaal en zit wss vol fouten, gebruik daarom de ingebouwde strcmp() functie.
Of gebruik de std::string klasse uit de STL lib van C++, maar mss leuk om precies te weten wat je doet.
Ik laat hem een tijdelijk object aanmaken voor het if-statement gebeurenquote:Op zondag 29 augustus 2010 15:33 schreef Cruise.Elroy het volgende:
Vergeet niet dat je bij elke string() call wel een stukje geheugen alloceert etc. Als je met std::string werkt, probeer dan zo snel mogelijk (en 1-malig) alle inkomende char* naar strings te converteren, en werk daarna met const string& referenties (of pointers) om zo het onnodig aanmaken van strings te voorkomen.
Niet dat je daarmee in de problemen zal komen, tenzij je echt tijdkritieke code gaat schrijven.
1 2 3 | //code } |
ja dat mag, maar kijk uit voor bijv:quote:Op maandag 30 augustus 2010 23:35 schreef netolk het volgende:
[..]
Ik laat hem een tijdelijk object aanmaken voor het if-statement gebeuren
zoiets als dit
[ code verwijderd ]
1 2 3 4 | else if (std::string(bla) == "hoi1") func_hoi1(); else if (std::string(bla) == "hoi2") func_hoi2(); else if (std::string(bla) == "hoi3") func_hoi3(); |
1 2 3 4 5 | if (blastr == "hoi") func_hoi0(); else if (blastr == "hoi1") func_hoi1(); else if (blastr == "hoi2") func_hoi2(); else if (blastr == "hoi3") func_hoi3(); |
1 |
Top dan kan ik het gewoon zo laten staan dusquote:Op donderdag 2 september 2010 11:12 schreef Cruise.Elroy het volgende:
ja ik had het nagezocht, en dat is idd zo. Vergeet niet dat std::string een specialisatie is van std::basicstring<> maar deze heeft nog extra functies om handig met de "ouderwetse" string0s uit C om te kunnen gaan
[ code verwijderd ]
quote:Op donderdag 2 september 2010 14:37 schreef Cruise.Elroy het volgende:
Dat kan sowieso, als je er 20.000 per seconde gaat doen, dan wordt het pas een issue
hmm.. oke bedankt in ieder gevalquote:Op maandag 20 september 2010 13:11 schreef Cruise.Elroy het volgende:
Nee, niet makkelijk volgens mij. Bijna alle standaard I/O is min of meer console-achtig.
Wat je kan doen is een frame-workje ergens downloaden die cross-platform is en die dingen goed wrapt.
Trollquote:Op maandag 20 september 2010 15:32 schreef thabit het volgende:
C++ is dan ook meer een verzameling hacks bij elkaar dan een echte programmeertaal.
quote:Op maandag 20 september 2010 15:32 schreef thabit het volgende:
C++ is dan ook meer een verzameling hacks bij elkaar dan een echte programmeertaal.
quote:
Dit klopt allemaal, maar dat komt gewoon omdat de taal op een bepaald abstractieniveau zit. Maakt de taal niet slecht, gewoon krachtiger maar minder geschikt voor RAD.quote:Op maandag 20 september 2010 23:04 schreef thabit het volgende:
Face it, mensen: het is niet goed porteerbaar, het heeft geen geheugenmanagement met garbage collector, het heeft geen goede ingebouwde ondersteuning voor parallelisatie. t Is eigenlijk gewoon een verkapte assembly en alleen handig voor kleine libraryfuncties die tot op de bit geoptimaliseerd moeten zijn en real-time applicaties en games waar elke ms telt en geheugen vaak de halve GB net haalt.
quote:Op dinsdag 21 september 2010 13:29 schreef Cruise.Elroy het volgende:
[..]
Dit klopt allemaal, maar dat komt gewoon omdat de taal op een bepaald abstractieniveau zit. Maakt de taal niet slecht, gewoon krachtiger maar minder geschikt voor RAD.
1 2 3 | netdb.h netinet/in.h |
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Weet iemand hoe ik deze code onder Windows kan laten werken?
PS. Ik gebruik de mingw compiler...Beware of the Raping Zebra's
Oke bedankt ik zal eens even een beetje gaan kloten met die winsock header en kijken of ik er wat uit kan krijgen...quote:Op woensdag 22 september 2010 21:47 schreef Cruise.Elroy het volgende:
Onder Windows kan je winsock.h gebruiken, werkt nagenoeg hetzelfde, maar je zal hier en daar wat calls moeten versleutelen.
Nou ik ben eerst maar begonnen met het volgen van een tut ipv dat example te draaienquote:Op donderdag 23 september 2010 10:08 schreef Cruise.Elroy het volgende:
Nog gelukt? Want winsock zou redelijk gelijk moeten zijn aan de standaard berkley sockets interface, zeker voor simpele apps.
http://en.wikipedia.org/wiki/Berkeley_sockets
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include "windows.h" #include "iostream" #include "stdlib.h" #include "winsock.h" #include "assert.h" int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsadata; int result = WSAStartup(MAKEWORD(2,2), &wsadata); //using winsock version 2.2 assert(result == 0); SOCKET listener; listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in localip; localip.sin_family = AF_INET; localip.sin_addr.s_addr = inet_addr("127.0.0.1"); localip.sin_port = htons(12345); result = (bind(listener, (SOCKADDR*) &localip, sizeof(localip))); assert(result == 0); listen(listener, SOMAXCONN); SOCKET incoming; incoming = accept(listener, NULL, NULL ); int error = WSAGetLastError(); assert(incoming != INVALID_SOCKET); closesocket(listener); // close listener, no longer needed, otherwise could be used again char buffer[100]; while (1) { int bytesreceived = recv(incoming, buffer, sizeof(buffer), 0); if (buffer[0] == 'x') break; send(incoming, buffer, bytesreceived, 0); } WSACleanup(); return 0; } |
Ja dat klopt idd het is nu opgelost maar ik kan nergens een duidelijk lijstje vinden van de fout codes van WSAGetLastError()...quote:Op zaterdag 25 september 2010 19:53 schreef Cruise.Elroy het volgende:
Ja dat zal je toch echt even zelf moeten debuggen, ik denk dat de client gewoon de verbinding verbreekt zodra hij verbinding heeft gemaakt. Iig een program-flow fout van jouw kant waarschijnlijk.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |