Subject: Re: Access the the second return value?
From: Erik Naggum <>
Date: 2000/07/03
Newsgroups: comp.lang.lisp
Message-ID: <>

* "Janos Blazi" <>
| You always had to use zero terminated strings in C, there was no way
| to circuvent them

  Wrong.  The language does initialize literal strings in the code to
  be zero-terminated, but there's nothing that actually requires this
  apart from the standard C library.  Software written in C that does
  not use literals in the source code don't have to deal with this at
  all if they don't want to.  Several Pascal systems have used a
  length word (16 bits) before the data.  A simple way to deal with C
  and Pascal is thus to allocate three bytes too many, relative to the
  exact length, and write the length before the string and a zero byte
  after it.  Some Common Lisp systems also do this zero byte thing for
  the benefit of their FFIs.

| (it took me several minutes to figure out that in LDB the byte does
| not necessarily starts at a byte boundary; it is a powerful
| function).

  You would have spent less time if you had looked up "byte" in the
  glossary of the HyperSpec.  The 8-bit byte is a story of IBM taking
  over the meaning of perfectly good words.

| (The reason for zero terminated strings was that on their first
| machine (PDP?) they used hardwate to find such zeroes.)

  Wrong.  (Except in the trivial sense that one _always_ uses hardware
  when executing programs of any kind.)

| And in C++ zero terminated strings still were in use, though they
| became less important.


  ISO/IEC 14882:1998(E) [lex.string] 2.13.4 String literals

4 After any necessary concatenation, in translation phase 7 (2.1),
  '\0' is appended to every string literal so that programs that scan
  a string can find its end.

| No, I did not know about this (as usual). So call it Lisp3.

  Why not just _drop_ this silliness?

  If this is not what you expected, please alter your expectations.