> The implication was there.
No, it wasn't. However, I can see how it could have been read as such. I will try to be more explicit in the future.
> Perhaps if you gave some examples that show your point more clearly.
The argv array is prepared by the startup code. You did not allocate it. Therefore, you cannot make assumptions on what data you are allowed to read near it. [memory you are allowed to read][memory you are not allowed to read]
The quick brown fox...\0........READ.AND.CRASH......................
When you say memcpy( mybuf, argv[ n ], 50 );
you run the very real possibility that you will will try to read something that the processor will disallow, causing your program to fail. Granted, I don't know any PC where that will happen, but the point is that you are assuming something about implementation dependent architecture.
You should instead stick to reading only that which you are given: strncat( mybuf, argv[ n ], 50 );
This (or my previously proffered strncpy()) guarantees that you are not going to violate any memory restrictions, wrap segments, or do anything else that your particular processor may spring on you, because you know that you are not reading memory that does not belong to you. Just because you've been able to get away with it on a PC for years doesn't mean that you will be able to get away with it on some other computer, or even some future PC.