woensdag 29 mei 2019

C/C++: string redemption

Het concept van string (oftewel char*) is een enorm drama in C/C++.
Redenen:
1) char (byte) is niet genoeg om UTF-8 strings te bevatten.
2) als je strings wilt samenvoegen, dan moet je eerst vantevoren gokken hoeveel characters je nodig hebt. Meestal komt het uit op een (te) ruime allocatie, bijvoorbeeld char[255], terwijl je er bijvoorbeeld maar 60 nodig hebt. Die ruimte wordt gereserveerd op de stack en die loopt sneller vol. Dus echt hardcore string crunching kun je op die manier niet doen, want dan krijg je een stackoverflow.
3) als er geen \0 aan het einde van de string staat, dan heb je een bufferoverrun te pakken. Een manier die hackers gebruiken om toegang tot je geheugen te krijgen.
4) beperkte C string library functions, waardoor bijvoorbeeld Howard Chu terecht klaagt over coderegels zoals: strcat(strcat(strcat(strcpy(buf, "This "),"is "),"a long "),"string.");

De beste vervangende string library voor C die ik gevonden heb is The Better String Library.

Geen opmerkingen:

Een reactie posten