Here’s a simple example of a program that concatenates two strings.
#include <stdio.h> void strcat(char *s, char *t); void strcat(char *s, char *t) { while (*s++ != '\0'); s--; while ((*s++ = *t++) != '\0'); } int main() { char *s = 'hello'; strcat(s, ' world'); while (*s != '\0') { putchar(*s++); } return 0; }
I’m wondering why it works. In main(), I have a pointer to the string ‘hello’. According to the K&R book, modifying a string like that is undefined behavior. So why is the program able to modify it by appending ‘ world’? Or is appending not considered as modifying?
Undefined behavior means a compiler can emit code that does anything. Working is a subset of undefined.