Вы передаете адрес по значению.
char * replaceURLS(char * body)
должен быть семантически заменен, как на самом деле
char * replaceURLS(char * addressOfStartOfBody)
Поскольку addressOfStartOfBody
передается по значению, а не по ссылке, вы не можете его изменить. Что вам нужно сделать, это изменить его так, чтобы он принимал адрес указателя.
char * replaceURLS(char ** addressOfBodyAddress)
Тогда, чтобы позвонить, у вас будет примерно такой код
char * bodyAddress;
char * returnVal = replaceURLS(&bodyAddress);
Это передаст адрес переменной bodyAddress. Это означает, что вы сможете изменить то, на что указывает bodyAddress.