Parsează șirul în componentele sale - depășirea stivei în limba rusă

Există o linie a formularului:

482 у820рв Maria Lvovna Zakaschikova * 9644 4855

Este necesar să o împărțiți în componente:

  • numar camera taxi (int),
  • numărul de mașină (pointerul la wchar_t. memorie este evidențiat cu interes)
  • Nume în asterisc (pointer la wchar_t., Memorie este evidențiată cu interes)
  • flux (float),
  • profit (float).

Din moment ce șirul original este de asemenea dublu-octet - folosesc funcția swscanf. Rezultatul este o funcție de parser a formularului:







Dar, după cum puteți înțelege, nu funcționează. Nici măcar primul INT nu este citit. Întrebarea standard - Unde sunt un idiot?

UPD În primul rând, vă mulțumesc foarte mult pentru ajutorul dvs. și sfaturi utile. Îmi corectez greșelile și omisiunile, care ar putea influența (și cel mai probabil afectat) viziunea problemei și a codului. Esența programului este de a citi datele structurate dintr-un fișier într-o serie de structuri. Am decis să fac acest lucru citirea calendarului și parsarea acestuia în componente, deci citesc datele nu direct în variabile, ci în câmpurile obiectelor de matrice.







Mai departe, în funcția de parsare I trec acum (mulțumiri Vladd), indicii pentru domeniul (Int float), și în loc de câmpuri de tip UnicodeString trec funcția rezultat c_str (), care returnează un pointer la un șir de caractere de tip wchar_t. În consecință, în codul final se arată astfel:

UPD2 După ce am corectat toate erorile descrise mai jos, am obținut efectul necesar, ResultParser a devenit într-adevăr un total de 5, ceea ce înseamnă că toate datele au fost luate în considerare. Dar am întâlnit o altă problemă - în câmpuri totul nu este scris în litere rusești, așa cum ar trebui, dar, aparent, într-o codificare diferită. Prin urmare, se pune întrebarea: cum este necesar pentru a citi datele de la wfstream fluxul de fișier de tip UnicodeString de obiect care trece cârja și celălalt legat aparent cu el, o greșeală?

presetate 24 Oct 13 la 18:27

@VladD, da nu există același lucru. De fapt, vorbim despre faptul că scanf vehiculului ( "% S [^ *]." Și este necesar (ca răspuns @strol) scanf ( "% [^ *]." Adică% [. Și nu% s [IMHO este de bază - O confuzie cu scanf ("." FSP. sau scanf (".", fsp [0]. // va fi de avertizare, dar GCC Generați codul corect sau scanf (, FSP compilatorul aparentă (în acest context), toate simțurile „“ -... AVP 25 octombrie la 11:53 '13

@strol, de fapt, dacă literele rusești sunt umplute în UTF-8, atunci puteți specifica locația en_US.UTF-8 și acestea vor fi afișate. Dar, chiar dacă eliminați literele rusești și wchar, atunci eroarea principală din TC este doar în formatul scanf. - Când scrieți răspunsurile, atunci nu numai codul pe care îl dați, ci cuvintele îi spuneți persoanei ce trebuie să facă. - avp ​​25 Oct 13 la 12:36







Articole similare

Trimiteți-le prietenilor: