Сначала необходимо проверить длину необходимого хранилища. Если у вас есть разные аргументы, правильный ответ - использовать цикл.
int i;
int needed = 1; // plus end of string mark
for(i = 1; i < argc; ++i) {
needed += strlen( argv[ i ] ) + 1; // plus space
}
Затем необходимо зарезервировать необходимый объем памяти и, используя другой цикл, объединить строки:
char * storage = (char *) malloc( sizeof( char ) * needed );
strcpy( storage, argv[ 1 ] );
for( i = 2; i < argc; ++i) {
strcat( storage, " " );
strcat( storage, argv[ i ] );
}
И, наконец, используйте пробел и освободите его.
printf( "%s\n", storage );
free( storage );
Надеюсь, это поможет.