|
C-/C++-Quelltext
|
1
|
#define strcpy(a, b) (strcpy_s((a), sizeof((a)), (b)))
|
soweit so gut
ich denke mal, es ist nicht grade die perfekte lösung, aber für den arbeitsaufwand doch schonmal nich schlecht und macht es auch schon etwas sicherer
:shock:
sicherer? ich würde mal sagen du hast extremes glück wenn das nicht abstürzt. schonmal überlegt was sizeof((a)) bedeutet!? wenn a ein zeiger is (und das ist es wohl meistens, weil die funktion immerhin an der stelle einen zeiger erwartet), dann wird das mächtig in die hose gehen.
_CRT_SECURE_NO_DEPRECATE definieren und gut ist.
warnings haben nen sinn. man sollte nicht einfach alles daran setzen sie wegzubekommen, sondern erstmal besser den ursachen nachgehen...
warning C4002: too many actual parameters for macro 'sprintf'
was genau wird denn hier dann gemacht? wird das macro einfach ignoriert, oder die 3 parameter ersetzt, und der rest halt so wie es da steht auch? (würde das problem auch lösen)?
sprintf is ne funktion mit ner variablen anzahl an parametern. mit dem makro wirst du da nicht weit kommen. wenn dann wirst du da auf
variadic macros setzen müssen (ist zwar nonstandard, aber da du eh die _s funktionen verwendest schätze ich mal dass das egal ist).
anyway. wenn du meinen rat willst: ich würd den ganzen #define kram möglichst schnell wieder loswerden...
[...] aber i.d.R ist es nicht sonderlich gut die Grösse eines Arrays mittels sizeof zu ermitteln. Vor allem funktioniert das mit dynamisch angefordertem Speicher nicht mehr.
es is kein problem mit sizeof die größe eines arrays zu bestimmen, da spricht nichts dagegen.
das problem ist, dass viele denken das arrays und zeiger das gleiche sind. sind sie aber nicht. auch wenn man den namen eines arrays wie einen zeiger verwenden kann. und das führt dann genau zu sowas wie dem define da oben...
aber ja, du hast recht. bei dynamisch angefordertem speicher funzt das nicht, eben weil da kein array zurückkommt