On Monday, 17 November 2014 at 12:49:16 UTC, Ola Fosheim Grøstad wrote:
On Monday, 17 November 2014 at 12:36:49 UTC, Paulo  Pinto wrote:
On Monday, 17 November 2014 at 11:43:45 UTC, Ola Fosheim Grøstad wrote:
Remember that the alternative to zero-terminated strings at that time was to have 2 string types, one with a one byte length and one with a larger length. So I think C made the right choice for it's time, to have a single string type without a length.

Black hat hackers, virus and security tools vendors around the world rejoice of that decision...

It was anything but right.

I don't think buffer overflow and string fundamentals are closely related, if used reasonably, but I'm not surprised you favour Pascal's solution of having two string types: one for strings up to 255 bytes and another one for longer strings.

Anyway, here is the real reason for how C implemented strings:

«None of BCPL, B, or C supports character data strongly in the language; each treats strings much like vectors of integers and supplements general rules by a few conventions. In both BCPL and B a string literal denotes the address of a static area initialized with the characters of the string, packed into cells. In BCPL, the first packed byte contains the number of characters in the string; in B, there is no count and strings are terminated by a special character, which B spelled `*e'. This change was made partially to avoid the limitation on the length of a string caused by holding the count in an 8- or 9-bit slot, and partly because maintaining the count seemed, in our experience, less convenient than using a terminator.

Individual characters in a BCPL string were usually manipulated by spreading the string out into another array, one character per cell, and then repacking it later; B provided corresponding routines, but people more often used other library functions that accessed or replaced individual characters in a string.»

http://cm.bell-labs.com/cm/cs/who/dmr/chist.html

I am fully aware how UNIX designers decided to ignore the systems programming being done in Algol variants, PL/I variants and many other wannabe systems programming languages that came before C.

Which they are repeating again with Go.

--
Paulo

Reply via email to