Silently truncating sounds like a nice way to deal with garbage input, but it creates security holes if not done consistently. Suppose one function uses char for a domain name while another has char. An attacker can pass a string of 250 characters where different initial substrings will be seen by the two functions. If the function doing validation truncates silently to 200 characters but other code uses a longer length, the attacker can sneak in nasty stuff after the first 200 chars.
The _s family of functions mentioned elsewhere in the discussion sound like the right approach. If you want truncation, and you've thought about the consequences, then you can ask for it. If you haven't thought about it and you don't explicitly check for the too-long error case, then the fail-safe behaviour is just to abort if this happens.