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.
- 755 megtekintés
Hozzászólások
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.
- A hozzászóláshoz be kell jelentkezni
Köszi, próbálkozom....
Kicsit fura, hogy egy "%02d" nem fér be egy 10 hosszú helyre.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Kicsit fura, hogy egy "%02d" nem fér be egy 10 hosszú helyre.
Pl.
-2147483648
az pontosan 11 karakter hosszu.
- A hozzászóláshoz be kell jelentkezni
nyos@hex:~$ gcc src/02d.c
nyos@hex:~$ ./a.out
9999
nyos@hex:~$ cat src/02d.c
#include <stdio.h>
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Gondoltam erre, de a char is lehet (előjellel) 4 jegyű.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
strftime() miért nem jó?
- A hozzászóláshoz be kell jelentkezni