I also inform that you do not need to append _2 to the name of the argument. Arguments can have their very own names and it is ok to have the same name as another variable in main().

You have a char pointer and you want to modify it. How do you expect it to be modified, if you pass a char pointer? It's - pretty much - like the swap example (which I think you have been taught) . You should pass a pointer to what you want to modify. So you should pass a pointer to a char pointer, which is a double char pointer.

Moreover, notice that only of your arguments are going to be set to something different than NULL, because of the if-else statement.
Notice also, that actually, non of them might be modified, because the condition at the if and if else statements may result to false.

Sorry about the indentation. I was aware that the arguments can be the same, I just like to name them differently. I also was aware of the if else statement and that one of the arguments will be set to NULL. However in the above example I passed it a value. I set, str_tknzd[1] = test( this is an edit, I missed, "You think that copies strings? No, strcpy does.", I thought that it sets the pointer to the address of test.) This means that opt_rdrct_2 should be equal to test. As to your statement, "You should pass a pointer to what you want to modify. So you should pass a pointer to a char pointer, which is a double char pointer." I don't understand what you are saying. I have tried to pass the function the the pointers. I am afraid I am missing something you are trying to convey to me. Can you clarify? Thank you for your help.

I also checked your website for some additional information on passing pointers to function, but was unable to locate any material on the subject.