Вам придется пройти через несколько функций, но ... вот так:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s1[] = "Hey there #!";
char s2[] = "Lou";
// Get the resulting length: s1, plus s2,
// plus terminator, minus one replaced character
// (the last two cancelling each other out).
char * s3 = malloc( strlen( s1 ) + strlen( s2 ) );
// The number of characters of s1 that are not "#".
// This does search for "any character from the second
// *string*", so "#", not '#'.
size_t pos = strcspn( s1, "#" );
// Copy up to '#' from s1
strncpy( s3, s1, pos );
// Append s2
strcat( s3, s2 );
// Append from s1 after the '#'
strcat( s3, s1 + pos + 1 );
// Check result.
puts( s3 );
}
Это не так эффективно, как вы могли бы это сделать (особенно многократные вызовы strcat()
неэффективны), но он использует только стандартные функции самым «простым» способом и не выполняет никаких «указателей».