<p><pre><code> A = {'a','b','\0'}; B = {'a', 'b', '\0'}; safercopy(2, A, 2, B);
A = {'a','b'}; B = {'a', 'b', '\0'}; safercopy(2, A, 2, B);
A = {'a','b','\0'}; B = {'a', 'b'}; safercopy(2, A, 2, B);
A = {'a','b'}; B = {'a', 'b'}; safercopy(2, A, 2, B);
</code></pre>
This analysis only tries different values of A and B, not the lengths. A proper analysis of "for what values does it fail" should include <i>all</i> parameters. What happens if you do `safercopy(3, A, 2, B)` or `safercopy(3, A, 3, B)`?