Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2015, 02:34   #1
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
Печаль Язык С. Как получить, размер аргумента командной строки?

Здравствуйте. Как получить, размер аргумента командной строки? Например, размер 1-ого аргумента? Надо ли, для этого, копировать всю командную строку, во временный буфер, или нет?

Например, есть строка, введённая в консоли: F:\Project\Project.exe Temp

В таком случае, 1-ым аргументом, является "Temp". Размер имени аргумента - 4 байта.

Изучать язык C, стал только недавно, и просто, даже не представляю, с какой стороны подступиться к этой проблеме. Знаю, как это, написать на Ассемблере, но не знаю, как это, написать на C. Помогите пожалуйста!
Не судите строго. Я только учусь языку С.

Последний раз редактировалось Fixator; 14.12.2015 в 02:56.
Fixator вне форума Ответить с цитированием
Старый 14.12.2015, 02:57   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Fixator Посмотреть сообщение
Здравствуйте. Как получить, размер аргумента командной строки? Например, размер 1-ого аргумента? Надо ли, для этого, копировать всю командную строку, во временный буфер, или нет?

Например, есть строка, введённая в консоли: F:\Project\Project.exe Temp

В таком случае, 1-ым аргументом, является "Temp". Размер имени аргумента - 4 байта.

Изучать язык C, сталь только недавно, и просто, даже не представляю, с какой стороны подступиться к этой проблеме. Знаю, как это, написать на Ассемблере, но не знаю, как это, написать на C. Помогите пожалуйста!
http://all-ht.ru/inf/prog/c/func/strlen.html
_Bers вне форума Ответить с цитированием
Старый 14.12.2015, 03:32   #3
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
По умолчанию

Вот, я дубина. Есть же функция, для этого. Просто, привык всё делать своими руками.

_Bers Спасибо. Очень помогли.
Не судите строго. Я только учусь языку С.
Fixator вне форума Ответить с цитированием
Старый 14.12.2015, 07:02   #4
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Цитата:
Сообщение от Fixator Посмотреть сообщение
Здравствуйте. Как получить, размер аргумента командной строки? Например, размер 1-ого аргумента? Надо ли, для этого, копировать всю командную строку, во временный буфер, или нет?
Нельзя копировать то, размер чего ещё не известен. Исключение - класс, полностью инкапсулирующий хранение данных и операцию копирования, тогда один его экземпляр можно скопировать в другой, не заботясь о размере. Но размер данных и в этом случае должен быть известен копирующему члену до фактического копирования и даже до фактического выделения памяти для копируемых данных, просто использующий код и его разработчик может этого размера не знать.
taras-proger вне форума Ответить с цитированием
Старый 14.12.2015, 07:48   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Нельзя копировать то, размер чего ещё не известен.
Расскажите это функции strcpy, размер то она не считает.

Цитата:
Исключение - класс, полностью инкапсулирующий хранение данных и операцию копирования, тогда один его экземпляр можно скопировать в другой, не заботясь о размере.
Это шутка, да? Размер такого класса известен компилятору или вы о другом?

Цитата:
Но размер данных и в этом случае должен быть известен копирующему члену до фактического копирования и даже до фактического выделения памяти для копируемых данных
Возможно, вы говорите о хороших практика программирования, но в реальность существуют куча ошибок оверфлоу, рендж чек и подобных.

Цитата:
просто использующий код и его разработчик может этого размера не знать.
Это как? Иди туда не знаю куда, принеси то - не знаю что? Конечно, можно написать что-то типа:
Код:
while(1){
  *p = 1;
  ++p;
}
но это как-то совсем...
p51x вне форума Ответить с цитированием
Старый 14.12.2015, 09:29   #6
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Не по теме, но
Код:
int main(int argc, char ** argv) {
   std::vector<std::string> cmdargs(argv, argv+argc) ;
}
И все параметры в векторе
Croessmah вне форума Ответить с цитированием
Старый 14.12.2015, 12:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Нельзя копировать то, размер чего ещё не известен.
А чего это он не известен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2015, 13:08   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Есть же функция, для этого. Просто, привык всё делать своими руками.
можно и руками. хорошо, когда они есть и из плечей растут, ибо в следующий раз подходящая функция может и не найтись.

главное - известен указатель на строку argv[номер_параметра], а конец её - это ноль.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.12.2015, 13:36   #9
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Расскажите это функции strcpy, размер то она не считает.
Кто сказал?
1. Размер нуль-терминальной строки отлично считается.
2. При этом за размер буфера отвечает вызывающий код, соответственно он тоже обязан измерить размер до выделения памяти. Либо о размере должен позаботиться программист и зарезервировать буфер, которого хватит.

Цитата:
Сообщение от Stilet Посмотреть сообщение
А чего это он не известен?
Потому что ТС собрался сначала скопировать, а только потом измерить. Так вот, это всё равно, что сначала купить канистру, а потом в неё лить то ли один стакан, то ли сразу танкер, а что не влезет, вколоть в мозг.

Последний раз редактировалось Stilet; 14.12.2015 в 13:46.
taras-proger вне форума Ответить с цитированием
Старый 14.12.2015, 13:41   #10
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
можно и руками. хорошо, когда они есть и из плечей растут, ибо в следующий раз подходящая функция может и не найтись.
Да - знаю.
Цитата:
Сообщение от min@y™ Посмотреть сообщение
главное - известен указатель на строку argv[номер_параметра], а конец её - это ноль.
Уже разобрался. Программирую не первый день. Просто я Ассемблерщик, и переключиться на С, очень не просто.
Синтаксис сбивает с толку, до такой степени, что бошка отказывается работать.
Не судите строго. Я только учусь языку С.
Fixator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как посмотреть работу программы в режиме командной строки moreman Помощь студентам 21 24.02.2015 17:08
Получить строку из "Командной Строки" Janger Общие вопросы Delphi 5 05.06.2014 08:03
Как получить размер dds-файла? RibGeDx Общие вопросы Delphi 8 16.03.2013 20:56
Как получить размер базы данных Greek9000 Общие вопросы .NET 1 02.08.2011 13:49
Как получить размер строки типа LPCWSTR? Gtx541 Общие вопросы C/C++ 1 30.05.2010 14:18