- // Find Picture number and X pos
- //Get testStr pos
- while(z < (strlen(PicPath)))
- {
- strncpy(PictureNr, PicPath+z, 1);
- if (strcmp(PictureNr,testStr)==0) { break; }
- z++;
- }
Her tager du 1 tegn ad gangen fra PicPath og smider over i PictureNr. Siden PicPath efter al sandsynlighed er større end 1 bliver der ikke indsat nogen nul-byte (se dokumentation for strncpy), hvilket kan give problemer. Så sammenligner du om PictureNr hvilket er en helt tilfældig streng siden vi ikke ved hvornår den slutter, med testStr. Men testStr kan kun være en enkelt streng så du kan umuligt finde flere forskellige strenge, hvilket du jo leder efter (de forskellige tal der kan være i strengen).
- //Get numper i path
- strncpy(PictureNr, PicPath, z);
- strncpy(PictureNr, PictureNr+z-1, z-1);
Her går den også galt. Lad os sige du finder dit tal på indeks, nr 5. Så vil z=5. Så tager du de første 5 tegn i PicPath og kopierer ind i PictureNr. Det du gør bagefter er sådan set at beholde indeks 4..7 hvilket virker lidt tilfældigt. Du bryder også funktionens betingelser hvilket er at destination og source ikke må være det samme.
http://www.cplusplus.com/reference/clibrary/cstring/strncpy/Kan godt være jeg har misset noget - kender heller ikke startværdien for z og testStr.
Som Gustav siger findes der ikke noget regex i ANSI C som standard. Du kan dog finde biblioteker. Men lad os lige prøve en simplere struktureret tilgang først:
Du siger opbygningen er ens. Nu ved jeg ikke hvilke dele er ens, men jeg antager at det er ':' i:
@MAIN_2560_1024.PROCESSPICTURE_1:F1_1_OPERATING
Så den overordnende tilgang er følgende:
1. Find kolonnet. Tallet vi leder efter er lige før.
2. Gå tilbage indtil vi møder noget andet end tal.
3. Træk tallet ud.
Det kan godt være der er nogen syntaksfejl der måske skal rettes.
- //Del 1.:
- char* position = PicPath; //Vores indeks i strengen
-
- //Vi antager der faktisk er et ':' i strengen. Hvis der ikke er det crasher det nok!
- while (*position != ':') position++;
-
- //Nu har vi indeks for komma i position.
- char* colonIdx = position;
-
- //Del 2. Gå tilbage så vi ved hvor tallet er.
-
- //Vi står på kolonnet - gå tilbage
- position--;
-
- //Vi udnytter faktummet at 0..9 kommer i rækkefølge i ASCII-tabellen
- while (*position >= '0' && *position <= '9') position--;
-
- //Vi gik en tak for langt
- position++;
-
- //Nu er 'position' på det første "tal-tegn" i tallet. 'colonIdx' er lige efter det sidste. Antallet af tegn i tallet er forskellen på dem.
-
- //Del 3. Træk tallet ud
- char* numberIdx = position;
- int digits = colonIdx - position;
-
- strncpy(PictureNr, numberIdx, digits);
-
- //Nu ligger tal-strengen i PictureNr. Så kan vi få det endelige tal:
- int thePictureNum = atoi(PictureNr);
Indlæg senest redigeret d. 31.10.2012 20:30 af Bruger #14645