Проблема в том, что выделенная память кажется обнуленной (или, по крайней мере, имеющей ноль после скопированной строки), и вы помещаете свой ' '
после строки, заканчивающейся '\0'
таким образом. Поэтому строка заканчивается после первого аргумента, и при печати она будет показывать только первый аргумент, а также strlen
будет возвращать количество символов до этого '\0'
. Измените это
istr++; // skipping the terminating '\0'
str[istr] = ' '; // writing ' ' after it
на
str[istr++] = ' '; // overwriting the terminating '\0' by ' '
str[istr] = '\0'; // terminating the string
Также измените это
(strlen(str) + strlen(argv[i]) + 1)
на
(strlen(str) + strlen(argv[i]) + 2)
Так что места достаточно для ' '
и окончание '\0'
.