zakerna zahada GCC

Jindroush jindroush na seznam.cz
Středa Únor 7 16:15:24 CET 2018


Dobry den,
nejsem si ted jist, jestli jsem pochopil spravne problem, ale podle mne 
mluvite o vlastnosti C, tj. short-circuitingu AND operatoru. Staci 
vyhodnotit levou cast a jde se dal, na poradi podminek zalezi. To je 
dulezite si uvedomit i u funkci, ktere maji vedlejsi efekty.

Jinak ten vas kod nezaruci zero-termination, nebo ano?

Fungovat v debugu by to nemelo, jen to nesletelo, protoze tam byla jinak 
a jinde alokovana pamet.

Co vam brani pouzit bezpecnou knihovni alternativu - strlcpy?
(Pripadne ji nekde obslehnout).

J.

On 7.2.2018 14:56, Jaroslav Buchta wrote:
> Mam datovy typ:
> 
> typedef union
> {
>      struct {
>          uint8_t b[32];
>      } ba;
> 
>      struct {    //common all records (chained records exception)
>          uint32_t id;            // id MSb == 0
>          uint32_t tstp[2];
>      }cmn;
> 
>      struct {    //Text Single or Start Record
>          uint32_t id;            // id MSb == 0
>          uint32_t tstp[2];        //timestamp in miliseconds, record 
> type FLCLOG_RT_* at 4 MSbs
>          uint8_t  sendRq;        //send to server request
>          uint8_t  text[19];    //content, max length
>      }recTxt;
> 
> ...
> 
> }FLCLOGRECORD;
> 
> Pokud napisu podminku
> 
> for (int idx=0; rec.recTxt.text[idx] != 0 && idx < 
> sizeof(rec.recTxt.text); idx++)
> 
> tak se to vykasle na druhou cast a index klidne leze na 19 a vic dokud 
> neni v pameti nahodou nula (kopiruje to strin ktery muze ale nemusi 
> koncit 0) Uz vim, ze je to v principu spatne a prvni cast si sahne mimo 
> rozsah pole, ale ze by to prekladac poresil takto?
> 
> Kdyz podminky prehodim
> 
> for (int idx=0; idx < sizeof(rec.recTxt.text) && rec.recTxt.text[idx] != 
> 0; idx++)
> 
> Tak to funguje OK ale uz jsem nemel cas zkoumat disassembler. V 
> neoptimalizovanem kodu to fungovalo i pro prvni variantu.
> 
> Vysvetli to chovani nekdo?
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


-- 
Jindroush <jindroush at seznam.cz>


Další informace o konferenci Hw-list