Параметры командной строки
При этом эти два массива (2 и 3) видимо ссылаются на одну и ту же область памяти, т.к. удаление символа в одном массиве приводит к удалению символа в другом массиве.
Вопрос как можно обойти это отслеживание пробелов, может быть есть функция, которая командную строку сразу разбивает на параметры? (прошу написать подробно)
Уточнение это в С++ Builder , т.е функция WinMain и ее параматры немного другие, нежели в main под DOS.
Благодарю за помощь
[ Это Сообщение было отредактировано Jeyson в 2001-09-17 0553 ]
int main(int argc, char** argv)
Дальше
argc - к-во параметров
argv - i-параметр
если ввели "что-нибудь с пробелом, но в кавычках", то это 1 параметр - без кавычек - несколько.
On 2001-09-16 1715, Darksawa wrote
В книге написано
int main(int argc, char** argv)
Дальше
argc - к-во параметров
argv - i-параметр
если ввели "что-нибудь с пробелом, но в кавычках", то это 1 параметр - без кавычек - несколько.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Это более или менее понятно (спасибо за разъяснение). Но это приложение под Windows и за запуск приложения отвечает функция WinMain (если я правильно понимаю), а ее параметры несколько отличаются
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR csStr, int)
{
....
}
csStr - это и есть коммандная строка (грубо говоря) Есть ли какие-то функции, которые принимают первый параметр (до пробела в ком. строке), а затем второй параметр (после пробела). Может быть тут надо работать с указателями (кстати как это сделать?)?
Благодарю за помощь.
Так реши чего-нить : DOS OR MustDie?
А как эта строка передается? Если ее можно преобразовать в строку, хоть какую-нибудь(хотя бы в тот же *char) так и проанализировать можно, что там до пробела и что там после.
Может есть какой-то другой вариант?
Прошу прощения за мое неведение в элементарных вещах
Благодарю за внимание к моему вопросу.
Классный это язык С++, а!!?
[ Это Сообщение было отредактировано Fantasist в 2001-09-26 1928 ]
(Тут этот $%#! сообщение повидимому в HTML переделывает и потому все лишнии пробелы выбрасываются. Так что '.' - это пробел)
int pos(char* s,char subst)
{
int i=1;
while ((*s!=subst)&&(*s!='\0'))
{ s++; i++;};
if (*s!=subst) {return 0;}
else {return i;};
};
char* TakeNextSubStr(char* &s)
{
char* s1=s;
int i=0;
i=pos(s,' ');
if (i!=0)
{s=s+i-1; *s=' '; s++;};
return s1;
};
Идея вобщем такова, что функция pos возвращает позицию нужного символа в строке (0 если символ не найден), а функция TakeNextSubStr ставит null-терминатор вместо первого найденного пробела, сдвигает исходный указатель в позицию сразу после помещенного null-терминатора, а возвращает исходный указатель до его изменения. То есть
из
.s
.|
"str1 str2 str3"\0
делает
.TakeNextSubStr
.........|
........"str1"\0"str2 str3"\0
.......................|
.......................s
Помоему в плюс плюсе можно так char* s=&charXX, или char* s=&charXX[0].
[ Это Сообщение было отредактировано Fantasist в 2001-09-27 0527 ]
Что-то тут проблемы с редактированием.
И спасибо,Jayson, за ответ.