Notes on running:

Both of strcat-no-crash.c and strcat-crash.c are wrong, even though only the
latter crashes. Despite the fact that the strcat-no-crash.c also prints garbage
characters, we won't always be able to rely on this happening as it's undefined
behavior (and we may not always be able to print out the array).
The reason we can print the array here is that it's a string and
we're just going until we find a null-terminator. (The reason we see garbage
characters is that we're just walking through memory until we find a byte that's
0. We read other things that are not actually characters in the middle.)

The tests of strcat work for me on unix13.andrew.cmu.edu, compiling as
follows:

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcc strcat.c strcat-correct.c -o strcat-correct
$ ./strcat-correct
hello this is a really long string that will break things if we don't have enough length
$ gcc strcat.c strcat-no-crash.c -o strcat-no-crash
$ ./strcat-no-crash
hello this is a really long string that will break things if we don't have enough length@��
$ gcc strcat.c strcat-crash.c -o strcat-crash
$ ./strcat-crash
hello this is a really long string that will break things if we don't ha@�v
Segmentation fault (core dumped)
