Whenever I create a char* with malloc(), the first few bytes get random data, which is different every time I compile the code. In this case, I wanted to concatenate 2 char* to create 1 char*.
char *JoinStrings(char *str1, char *str2) { int length = strlen(str1) + strlen(str2) + 1; char *newString = malloc(length); if (newString == NULL) { printf("malloc failed\n"); return NULL; } newString[length] = 0; // add the 0 byte at the end printf("String 1: %s\n", str1); printf("String 2: %s\n", str2); printf("New String: %s\n", newString); strcat(newString, str1); strcat(newString, str2); printf("Joined String: %s\n", newString); return newString; } I will call the function using this line:
char *join1 = JoinStrings("Hello,", " World"); I would expect it to print out "Joined String: Hello, World" as the last printed message, but it instead returns this:
String 1: Hello, String 2: World New String: p‼√ΓJ☻ Joined String: p‼√ΓJ☻Hello, World I have no idea where it gets the random bytes from, and they are randomized every time I compile it. And because it gets randomized when I compile it, here is the GCC version I'm using: gcc.exe (Rev1, Built by MSYS2 project) 11.2.0.