Tired of painting the bikeshed; why does the scope keep changing to suite diffferent points?
This is not overhead, complicated, or difficult. You do it a thousand times when you write code. You are not calling or creating an API, you are not creating a library, or reinventing the steam locomotive, you are mearly accepting data (from a source you may not have control of--user or text file for example) and you should check to make sure it is of the type/scope/range you expect before you go off "dividing by zero" or some other weird thing.
It is the same as:
if (n <= 0) {
printf("The number should be positive.\n");
} else {
for (int i = 1; i <= n; ++i) {
Are [you] honestly telling me this is not "correct". -i.e. in this code the program exits (falls out of the IF statement) if the number isnt postive; are [you] telling me the programmer should have just "preformed math" or "entered a loop" or "launched N rockets" on/with a negative number?
In the two examples we have been using I mearly made the point that STRCAT will fail (not "exit" or "fall out". "fail") in the instance that the argument was not a string (it is like saying the "<=", above, is not able to check numbers and something else should be used).
Of course native functions (and library functions) will fail if they receive a value not in their wheel house. You cannot expect RTOS to accept strings nor should you expect STRCAT to accept numbers (absolutely nothing shocking here).