[-Wformat-overflow=]

 ( meditor | 2019. január 8., kedd - 13:37 )

Arra szeretném rávenni a programot, hogy tegyen be egy stringbe egy 2 hosszú, előnullázott számot. Tudok róla, hogy a végére odapöttyint egy '\0'-át és fel is használom ezt a dolgot a továbbiakban.

A fordító dobja nekem ezt a warningot, mondja is milyen flaggel tudom ezt felülírni, de én szeretném megtartani a -Wall ficsört, mert ezt olyan megnyugtató. Meg lehet ezt a problémát kerülni valahogyan?

/meditor/2010/include/meditor.c:158:25: warning: '%02d' directive writing between 2 and 11 bytes into a region of size 10 [-Wformat-overflow=]

sprintf(ShortDateStr,"%02d",DaTi->tm_year-100);sprintf(&ShortDateStr[3],"%02d",DaTi->tm_mon+1);sprintf(&ShortDateStr[6],"%02d",DaTi->tm_mday);

Köszi a válaszokat előre is.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A gcc szerint lehet, hogy az eredmeny nem fer be a 10 byte-os teruletre.

- hasznalj snprintf-t (amugy is ajanlott)
- probalj short int formatumot adni az sprintf-nek (%02hd)
- noveld meg a puffert, amibe irsz.

Disclaimer: nem probaltam ki.

Köszi, próbálkozom....

Kicsit fura, hogy egy "%02d" nem fér be egy 10 hosszú helyre.

> Sol omnibus lucet.

Idézet:
Kicsit fura, hogy egy "%02d" nem fér be egy 10 hosszú helyre.

Pl. -2147483648 az pontosan 11 karakter hosszu.

nyos@hex:~$ gcc src/02d.c
nyos@hex:~$ ./a.out
9999
nyos@hex:~$ cat src/02d.c
#include 

int main()
{
  printf("%02d\n",9999);
}

Ha valaminek a _minimalis_ hossza 2, attol meg lehet 10 hosszu.

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Nincs gond, nagyjából értem én, arra nézvést kapok figyelmeztetést, hogy nem biztos az a 2 karakter hosszúság. Eddig ez a hibaüzenet nem volt, az új gcc dobja.

Különösebben nem látom ennek a warning-nak az értelmét, mert el tudom dönteni, hogy elég-e 2 hely vagy nem. Letiltottam egy =0 értékkel, kompatibilitási szempontból jobb lenne, ha ez lenne a default érték.

> Sol omnibus lucet.

Hasznalj snprintf-et inkabb, ahogy irtak! Pont erre valo.

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Ha el tudod dönteni, hogy 2 hely elég, az azt jelenti, hogy -9 és 99 között van az érték, akkor castolhatod char típusra és nem fog sírni a GCC szerintem. És pont jó, hogy nem az =0 a default érték.

Gondoltam erre, de a char is lehet (előjellel) 4 jegyű.

> Sol omnibus lucet.

Tegyél be egy assertet arra az esetre, ha a szám túl kicsi vagy túl nagy. Talán van annyi esze a gcc-nek, hogy akkor már nem warningol.

strftime() miért nem jó?