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.