Цитата(Сергей Борщ @ Apr 30 2015, 16:18)

Еще лучше. Сначала вы заводили массив из одного байта ("") и объявляли указатель (command *), указывающий на начало этого массива. После чего, двигая указатель уходили за пределы массива, круша все, что попадалось на пути. Теперь вы просто завели указатель, показывающий куда попало (потому что неиницимализированный и содержащий мусор из памяти) и начали крушить уже где попало. Не удивлюсь, если компилятор выдал предупреждение об этом, но вы на это предупреждение забили.
неа, молчит гад, не ругается.
и кстати почему так работает?
char *command="";
command = strtok(str," ");
Цитата(Сергей Борщ @ Apr 30 2015, 16:18)

Компилятор автоматически добавляет завершающий ноль к строковым литералам. Он не обладает телепатическими свойствами чтобы понять, что выражением "arg[arg_idx-1][char_idx++] = *str;" вы создаете новую строку - для него это просто копирование символа из одного места в другое. Только копирование и ничего более.
но последний символ строки он ведь '\0'. у меня же нет index overflow.
да и кстати он таки телепат -у меня фиксированные строки char arguments[4][20];
Сообщение отредактировал Jenya7 - Apr 30 2015, 11:37