fgetws
Nesvacil Jiri
nesvacil na posys.eu
Úterý Srpen 30 08:41:30 CEST 2022
Zdravim,
jak jsem psal ?
Pokud Vám fgetws vrátí null a v szwBuffer nebude ukonceni retezce, jak
dopadne wprintf ?
Nebo pokud nebudete cist na hrane encodovatelnosti znaku, ten buffer 255
zrovna neni deliteny
Neco mate tady
https://stackoverflow.com/questions/38160929/reading-utf-8-from-stdin-using-fgets-on-windows
Obecne se vsude prechazi na utf-8. Nasel bych si metody/zpusob jak cist
po slovech ci po radku, abych zarucil, ze se nedostanu na hranu nebo
pouzil metody, ktere zaruci jiz to vnitrni encodovani, ze vrati cely
znak nebo nic.
Vubec nejlepe prejit do golang nebo javascriptu... lua. Prace s retezci
a alokace neni silna stranka C, nejspise se tam dopustite spoustu
neumyslnych chyb. Nebo si napiste sve knihovny na retezce, tak to delame.
Jirka
Dne 29.08.2022 v 20:27 Michal Grunt napsal(a):
> Jsem v koncích. Lámu si s tím hlavu už několik hodin. Po překladu (gcc
> na RPi) a spuštění to hlásí chybu: Neoprávněný přístup do paměti
> (SIGSEGV)
>
> Havaruje to na fgetws...
>
> Příkaz "mpc status | head -n 1" vrátí název stanice nebo interpreta a
> to v UTF 8 formátu (diakritika).
>
> Co dělám špatně? Zkoušel jsem nad tím i usilovně přemýšlet :-), ale
> ani to nepomohlo. Metoda pokus omyl (co najdu po internetu) je také
> selhala. Níže je uveden jeden z mnoha pokusů.
>
> Blbý je, že se to ani nedá nějak pořádně debugovat nebo to neumím (na
> RPi a přístup přes SSH na konzoli).
>
> Děkuji
> MG
>
> #define BUF_LEN 255
> static wchar_t szwBuffer[BUF_LEN];
>
> setlocale(LC_CTYPE, "en.UTF-8");
>
> fp = popen( "mpc status | head -n 1", "r");
> if (fp == NULL) {
> printf("Failed to run command\n" );
> exit(1);
> }
>
> fwide(fp,1);
> while (fgetws(szwBuffer, sizeof(szwBuffer)/sizeof(wchar_t), fp) !=
> (wchar_t *)NULL);
>
> wprintf( L"%s\n", szwBuffer);
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list