"Type safety" is using a "type system" to ensure that errors are not propagated within programs. For example, without type safety, it might be possible to (silently) add a string type to floating point type in some undesirable way.
In the instances you're talking about, memcpy() and printf(), the lack of type safety is due to the how the functions treat their arguments. For example, with memcpy(arg1, arg2, len), the len bytes starting at memory address arg2 will be copied to memory address arg1, regardless of how many bytes arg1 points to, potentially overwriting other portions of your program.
For type safe alternatives, look into constructors and cout.
In fact, look into the entire C++ FAQ Lite