Peter N Lewis wrote:
At 14:28 -0800 11/3/03, Russell Whitaker wrote:
adding 3 more lines of code should answer your question:
program test;
type Str255 = array[0..255] of char;
var a,b: Str255; begin
a := 'hello '; b := 'world';
a := a + b;
writeln( a );
end.
Amusingly, yes, that is originally what I had. But since it only printed "hello" when I ran it, I presumed it was not what I expected. Indeed, when I run the above program, it outputs:
zany:~/unix/c% ./testpas2 hello zany:~/unix/c%
In fact, it seems to output "hello" followed by 256-5 spaces, followed by a newline.
Such arrays have fixed-length (no explicit length indicator). So what does the compiler do when assigning a shorter string? It pads with spaces. EP 6.4.6:
: At any place where the rule of assignment-compatibility is used to : require a value of the canonical string-type to be : assignment-compatible with a fixed-string-type or the char-type, : the canonical string-type value shall be treated as a value of the : fixed-string-type whose components in order of increasing index : shall be the components of the canonical-string-type value in : order of increasing index followed by zero or more spaces.
So after the first assignment a already contains `hello' plus 251 spaces. Appending more to it isn't possible, to that's what's written.
Frank