Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907

Аргументы коммандной строки

28.08.2012, 16:33. Показов 2918. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Моему приложению должны как параметр передать имя файла, но в нем могут быть пробелы
например такое имя "c:\data\my data\file 1.txt"
как получить эту строку со всеми пробелами?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.08.2012, 16:33
Ответы с готовыми решениями:

Аргументы командной строки
Здравствуйте. Подскажите пожалуйста, как в консольном приложении создать аргументы командной строки, как в примере. Пример запуска...

Как обработать аргументы коммандной строки?
Я делаю вот так if (strcmp(argv,"/?")==0) { puts("This my help"); } if (strcmp(argv,"/i")==0) { ...

Обработка параметров коммандной строки
как обработать несколько параметров для опции? getopt вроде только один берет. Вот что хочу: move_user --user user_name --nodes node44...

27
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
28.08.2012, 16:35
Если аргумент был взят в кавычки при вызове, то всё будет как надо, вся строка будет в одном из элементов argv
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
28.08.2012, 16:36  [ТС]
NoMasters, ну в ковычки это я знаю, как без них?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
28.08.2012, 16:51
Если из консоли, то никак.

Добавлено через 1 минуту
А, ещё можно экранировать пробелы, хотя я не знаю, как это делается в виндовых оболочках, там \ для путей же...
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
28.08.2012, 17:46  [ТС]
NoMasters, под венду я знаю как получить, меня интересовал кросс вариант
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
28.08.2012, 19:10
Для чего это вообще нужно?
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
28.08.2012, 20:31  [ТС]
Цитата Сообщение от NoMasters Посмотреть сообщение
Для чего это вообще нужно?
просто интересно
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
28.08.2012, 22:10
aram_gyumri, можно соединить аргументы с пробелами, начиная с первого (так как нулевой - сама прога). То есть
C
1
2
3
for (i = 1; i < argc; i++) {
    strcat(my_arg, argv[i]);
}
0
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
28.08.2012, 22:17
Цитата Сообщение от remarkes Посмотреть сообщение
можно соединить аргументы с пробелами, начиная с первого (так как нулевой - сама прога). То есть
А смысл? Пропадут пробели
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.08.2012, 00:51
aram_gyumri, если аргумент один, то strcat, если не один то strcat + parsing.
Цитата Сообщение от defer Посмотреть сообщение
А смысл? Пропадут пробели
а вставить пробелы?
Цитата Сообщение от remarkes Посмотреть сообщение
C
1
2
3
4
for (i = 1; i < argc; i++) {
    strcat(my_arg, " ");
    strcat(my_arg, argv[i]);
}
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
29.08.2012, 01:06
Цитата Сообщение от aram_gyumri Посмотреть сообщение
NoMasters, под венду я знаю как получить, меня интересовал кросс вариант
а пути у тебя тоже кросс вариант?
бред, программа не должна этим заниматься
1
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
29.08.2012, 09:38
А если там не пробел, а табуляция была?
Выше правильно сказали - бред.
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
31.08.2012, 12:01
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
А если там не пробел, а табуляция была?
табуляция в пути файла - это редкость
в конце концов, если путь к файлу при вызове окажется некорректным, программа может выдать "вы написали фигню. до свидания" и выйти.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
31.08.2012, 21:11
Цитата Сообщение от aram_gyumri Посмотреть сообщение
ну в ковычки это я знаю, как без них?
- а без кАвычек будет просто два параметра. Их нужно склеить, вставив между ними пробел. Это элементарно делается с пом. strcpy и strcat
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
31.08.2012, 22:50  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- а без кАвычек будет просто два параметра. Их нужно склеить, вставив между ними пробел. Это элементарно делается с пом. strcpy и strcat
Это я знаю меня интересовал тот случай когда не один пробел а скажем 4
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
31.08.2012, 23:35
Цитата Сообщение от Catstail Посмотреть сообщение
Их нужно склеить, вставив между ними пробел.
Интересно было бы посмотреть на алгоритм, различающий случаи
Code
1
./my_program first\ file second\ file
и
Code
1
./my_program first file second file
Как угадать, что во втором случае передано два имени файла, а не одно или три?

Не по теме:

Цитата Сообщение от aram_gyumri Посмотреть сообщение
меня интересовал тот случай когда не один пробел а скажем 4
Делать вам нечего...

0
 Аватар для СашаН
349 / 299 / 166
Регистрация: 15.03.2012
Сообщений: 653
Записей в блоге: 1
01.09.2012, 21:19
Цитата Сообщение от aram_gyumri Посмотреть сообщение
Моему приложению должны как параметр передать имя файла, но в нем могут быть пробелы
например такое имя "c:\data\my data\file 1.txt"
как получить эту строку со всеми пробелами?
Если передаётся только имя файла, то проблем никаких нету.
Делай как сказал Catstail, например так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
int main(int argc, char *argv[])
{
  int counter;
  char filename[80];
 
  if (argc > 1) {
    strcpy(filename, argv[1]);
    for (counter = 2; counter < argc; ++counter) {
      strcat(filename," ");
      strcat(filename, argv[counter]);
    }
  }
  printf("Filename : %s\n", filename);
  return 0;
}
Ну и вставляй строку в fopen().
0
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
02.09.2012, 02:05
Цитата Сообщение от СашаН Посмотреть сообщение
Если передаётся только имя файла, то проблем никаких нету.
А если в имени файла два пробела?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
02.09.2012, 15:54
Цитата Сообщение от aram_gyumri Посмотреть сообщение
Это я знаю меня интересовал тот случай когда не один пробел а скажем 4
тогда, скажем, будет 5 параметров...
0
 Аватар для СашаН
349 / 299 / 166
Регистрация: 15.03.2012
Сообщений: 653
Записей в блоге: 1
02.09.2012, 23:35
Цитата Сообщение от defer Посмотреть сообщение
А если в имени файла два пробела?
В таком случае надо импровизировать.
Mожно к примеру воспользоватся функцыей system().
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main(void)
{
 
  /* for Linux
   *************************/
  system("ls -l > test.txt");
 
  /* for Windows
   *************************/
  system("dir > test.txt");
    
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2012, 23:35
Помогаю со студенческими работами здесь

Обработка аргументов коммандной строки
Подскажите какие способы существуют обработки аргументов коммандной строки на Си, нужно что бы быстро обрабатывались аргументы корректно...

Идеи насчет коммандной строки
Друзья, нужна искренне Ваша помощь. Язык ANSI C Есть структура Flags, в которую я буду сохранять все значения с коммандной строки...

Как считать параметр коммандной строки
Я понимаю, что его можно считать из заголовка экзешника, но существует ли более простой способ, а то не охото байтики перебирать. ...

Обработка адреса DNS и IP из коммандной строки
Имеется ли функция которая исходя из полученного аргумента будет использовать подходяшую функцию? Т.е. если argv == &quot;localhost&quot;...

Подсоединение сетевых дисков с коммандной строки
Как (зная пароль на учётную запись) приконнектить сетевой диск с другой машины? Я помню синтаксис приблизительно такой NET USE X:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru