Robert B.: Windows-API: Speicherverbrauch der laufenden Anwendung abfragen

Beitrag lesen

Moin Martin,

wsprintf(str, "RAM: %d kB", pmc.WorkingSetSize>>10);

woher weiß denn wsprintf hier, wie groß str ist? Oder weiß es das gar nicht

das weiß es tatsächlich nicht. Aber ich weiß es.

die berühmten „letzten Worte eines C-Programmierers“ analog zum Beifahrer, der vermeldet, dass „von rechts kein Auto kommt“ 😉

Note Do not use. Consider using one of the following functions instead: StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx. See Security Considerations.

Ich mag solche Pauschalaussagen nicht.

Das Beispiel gets zeigt allerdings, dass solche Warnungen notwendig sind, weil sonst Programmierer, die glaube zu wissen, was sie vermeintlich tun, auch weiterhin unsicheren Code schreiben.

Weiter unten heißt es übrigens:

The maximum size of the buffer is 1,024 bytes.

Nanu, warum benutze ich wohl immer CHAR[1024] als Puffer für wsprintf()? 😉

Deine formatierten Strings sind 1 KiB groß? Auf einem C64 wäre das aber sehr eng geworden 😜 Du kannst aber auch Annahmen über deine Stringlänge treffen und Funktionen verwenden, die dann garantiert keinen Buffer-Overflow erzeugen, z.B. snprintf

Außerdem hat wsprintf() noch einen großen Vorteil gegenüber den als Alternativen vorgeschlagenen Funktionen: Es liefert mir als Ergebnis die Länge des erzeugten Strings. Sehr nützlich, wenn man einen String in einer Schleife Schritt für Schritt aufbauen will.

… das auch die tatsächliche Stringlänge zurückliefert. Es ist nicht alles schlecht am C-Standard.

Viele Grüße
Robert