PARSING: Mee gekregen \0 terminated string: arg = Iets;80\nTwee;90\nLol;900\n\0 Maak een buffer met de lengte van die string: char buffer[strlen(arg)]; Doorloop de string, liefst slechts 1 keer: Indien arg zijn lengte 0 is of indien arg niet eindigd op \n: PARSE ERROR ParamTeller = 0 ItemTeller = 0 StrLen = 0 Doorloop elk karakter in de string tot \0: indien karakter ; is: ParamTeller++ vervang ; door \0 indien karakter \n is: vervang \n door \0 ItemTeller++ indien karakter \0 is: Verlaat lus StrLen++ INDIEN ItemTeller en ParamTeller niet gelijk zijn: PARSE ERROR! INDIEN ItemTeller gelijk is aan 0: PARSE ERROR (een string zonder ; of \n in...) Resultaat: ItemTeller = 3; arg = Iets\080\0Twee\090\0Lol\0900\n\0 Nu is arg in feite: Iets\0 Uiteindelijk is arg nu geen C String meer, maar een eigen data structure geworden. Hier moet rekening mee gehouden worden. StrLen en de data structure zijn met elkaar verbonden: struct { char * ParsedString; int len; } parsedString; Kijken in lijst items, indien Iets daarin zit: arg = arg + (strlen(arg) + 1); Nu is arg in feite: 80\0 Dit item heeft een veld die een string bij houdt: char waarde[strlen(80\0)+1]; kopieer 80\0 naar waarde PROBLEMEN: STEL: arg = Iets;80\nTwee;90\nLol;\n\0 DAN: arg = Iets\080\0Twee\090\0Lol\0\0\0 strlen(Lol\0) + 1 = 4; ==> arg = \0; strlen(\0) + 1 = 1; ==> kopieert \0 in string voor eigenschap STEL: arg = Iets80\nTwee;90\nLol;80\n\0 DAN: arg = Iets80\0Twee\090\0Lol\080\0\0 ItemTeller = 3; arg is Iets80 zoekt naar Iets80, STEL dat toevallig dit wel bestaat: dan kopieert hij Twee daarin. Volgend item is dan 90 waarin Lol wordt gekopieerd daarna is het 80 waarin \0 wordt gekopieerd. Dit is volstrekt fout! Daarom ook ; tellen, indien ItemTeller en ; teller niet overeenkomen op het einde van de LUS... error STEL: arg = Iets;;80\nTwee;90\nLol;80\n\0 DAN: PARSE ERROR want ItemTeller en ParamTeller komen niet overeen. Oplossing: Variabele die zegt waarnaar wordt gezogd. Wanneer een ; wordt gevonden zeggen dat we naar \n zoeken en omgekeerd! Nieuwe pseudo code: ParamTeller = 0 ItemTeller = 0 StrLen = 0 Doorloop elk karakter in de string tot \0: indien karakter ; is en we zoeken naar ; : ParamTeller++ vervang ; door \0 Nu zoeken we naar \n indien karakter \n is en we zoeken naar \n: vervang \n door \0 ItemTeller++ Nu zoeken we naar ; indien karakter \0 is: Verlaat lus StrLen++ INDIEN ItemTeller en ParamTeller niet gelijk zijn: PARSE ERROR! INDIEN ItemTeller gelijk is aan 0: PARSE ERROR (een string zonder ; of \n in...)