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)