Ich erhalte folgende Fehlermeldung:
Debug Assertion Failed!
Program
...ges\textmetric\Debug\textmetric.exe
File f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c
Line 244
Expression:("Buffer too small", 0)
Kann mir jemand sagen, woran das liegt?
LFX3
> char szZahl[10];> case 0: sprintf_s(szZahl, "%31d", tm.tmHeight);
Wie soll denn eine Zahl, die du mit 31 Dezimalstellen als Text
dargestellt haben willst (und der Text daher aus 31 Zeichen bestehen
wird), in einen String passen, der gerade mal Platz für 9 Zeichen hat?
... eine Automatik eingebaut hat, die dann greift, wenn der Compiler das
Array selber sehen kann. Denn irgendwann hast du dann diesen Fall nicht
mehr und dann ist das Kopfkratzen groß, was denn das Problem ist. Nichts
gegen Komfort, aber zuviel Komfort macht nachlässig.
Und ob die "ld" richtig sind, muss man in der TEXTMETRIC Struktur
nachsehen. Das steht
1
typedefstructtagTEXTMETRIC{/* tm */
2
inttmHeight;
3
inttmAscent;
4
inttmDescent;
5
inttmInternalLeading;
6
inttmExternalLeading;
7
inttmAveCharWidth;
8
inttmMaxCharWidth;
9
inttmWeight;
10
BYTEtmItalic;
11
BYTEtmUnderlined;
12
BYTEtmStruckOut;
13
BYTEtmFirstChar;
14
BYTEtmLastChar;
15
BYTEtmDefaultChar;
16
BYTEtmBreakChar;
17
BYTEtmPitchAndFamily;
18
BYTEtmCharSet;
19
inttmOverhang;
20
inttmDigitizedAspectX;
21
inttmDigitizedAspectY;
22
}TEXTMETRIC;
Nö. ld ist definitiv falsch. tmHeight ist vom Datentyp int. Also muss
der Formatspecifier ein "d" sein und kein "ld".
Leg das Buch zur Seite und kauf dir erst mal ein vernünftiges
Einsteigerbuch für C. Der Klassiker "Kernighan&Ritchie" wird immer
wieder gerne genommen.
Wenn du den durch hast und auch verstehst, dann fallen dir die Fehler in
diesem Buch dann auch auf. Alleine der Titel muss schon stutzig machen.
Zwischen "Einführung" und "professioneller Anwendung" liegen im
günstigen Fall so ca. 3 bis 4 Jahre und eine halbes Bücherregal an
Literatur.