In Visual Studio 2010 kreeg ik steeds de waarschuwing met betrekking tot de verouderde strcpy. Microsoft meldt dat dit verouderd is omdat ze zelf nieuwe functies hebben gemaakt die je zou moeten gebruiken. De _s staat dan ook voor secure. Om de Microsoft standaarden na te leven zul je dus wanneer je een project met een compiler die die standaarden volgt je code wat moeten wijzigen om geen waarschuwingen meer te krijgen. Hieronder wat ik gedaan heb:
strcpy(target, oorsprong);
gewijzigd naar:
strcpy_s(target, strlen(oorsprong), oorsprong);
Het houdt nu namelijk ook rekening met de lengte van de karakter rij zodat er geen overloading plaats kan vinden.
Sizeof() of strlen() ?
Er is ook nog een verschil tussen het gebruik van sizeof en strlen om de lengte van een karakter rij te verkrijgen. Gebruikmakend van sizeof bij de bovenstaande code kan het een probleem geven bij Dynamische rijen.
sizeof () geeft de totale lengte van een string terug, dit is inclusief het terminerende ‘\0′ karakter. De functie wordt geĆ«valueerd tijdens het compileren dus krijgt een vast argument mee.
strlen() geeft ook de lengte van de string maar dan zonder het ‘\0′ karakter. De functie wordt geevalueerd tijden run-time dus kan het argument een pointer zijn die kan veranderen.
