LINUX.ORG.RU

c++ string


0

0

если в командной строке между параметрами _пробел_ воспринимается как разделитель опций, то почему когда я пытаюсь передать этот самый пробел: string param=" "; или string param=' '; прога которой передаются параметры ругается на что-то типа "ошибка опций командной строки"? пробел ведь он и есть пробел..

★★★★★

О мой хвост, в main передается null terminated массив состоящий из аргументов, уже разделенных.

wfrr ★★☆
()
Ответ на: комментарий от dilmah

и ведь не спят :)
так как передать этот параметр _пробел_? остальные символы передаются корректно, или что почитать чтоб доступным языком?

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

./prog qwe\ asd

./prog "qwe asd"

./prog 'qwe asd'

Это ты еще $ не пробовал передавать..

sergej ★★★★★
()
Ответ на: комментарий от vyv

код показывать стыдно...:) он.. своеобразен
-пап а кто президент России?
-о сынок. стыдно не знать.
-пап что с тобой?
-стыдно..

кароч "программа" выпытывает у юзера параметры кодирования и передаёт их mencoder'y ,собирает в виде строк(здесь же подсказали).

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

Итак, дело понемногу проясняется. Есть "прога", mencoder, и "программа", нечто постыдное. Программа запускает прогу с какими-то аргументами, а прога ругается, что аргументы не понятны.

Остаётся разузнать, каким способом из программы вызывается прога (какой функцией стандартной библиотеки), какие аргументы передаются в эту функцию, и какой результат хотелось бы получить, и тогда, наверное, уже можно будет ответить на поставленный вопрос.

alexsaa
()
Ответ на: комментарий от alexsaa

я так понимаю, что mencoder видит пробел который я передаю ему с помощью string как нечто другое,хотя пробелы вставленные автоматически между параметрами массива строк понимает как надо

char *encode[25]={(char*)mencoder.c_str(),
                  (char*)inputFile.c_str(),
                  (char*)ss.c_str(),
                  (char*)ssStr.c_str(),
                  (char*)oac.c_str(),
вот такую строку  (char*)space.c_str(), например, не понимает
                  (char*)acopy.c_str(),
                  (char*)mp3lame.c_str(),
                  (char*)lameopts.c_str(),                  
                  (char*)lameStr.c_str(),
строки space нет, это для примера, если вставляю пробел в параметрах ругается так-же.

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

> Программа запускает прогу с какими-то аргументами, а прога ругается, что аргументы не понятны.

Логично. Со строкой space.c_str(), это соотвествует вот такому:

mencoder input-file -ss blah-blah-blah -oac " " acopy mp3lame -lameopts lameStr

Т.е. у mencoder'а просят аудиокодек с названием <один пробел>, которого ессно нет.

anonymous
()
Ответ на: комментарий от anonymous

acopy тож пустой если выбирается mp3 кодирование, на него и ругается(если пусто -"" и если пробел -" " и -' ' тоже)
как побороть?

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от anonymous

перед передачей параметров mencoder'y делаю вывод строки кавычек нет, строка как строка с пробелами меж параметров, но ругается

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

с пробелами "решил" -переставил их после всех lame опций и xvid, а можно как-нибудь передать нек-е параметры не string a int?(execvp)

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

сделай массив encode динамически заполняемым. Если параметр пустой, то он в массив не заносится. Потом скармливаешь этот массив execvp.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

на счёт int to string так и делаю,я имел ввиду что бы именно int...
а на счёт динамически заполняемого массива щас погуглю, спасибо

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

2alex_custov : а ещё вопрос/хинт можно?

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

имеется кус кода:
{ 
 mp3lame="mp3lame";
 lameopts="-lameopts";
 vbr="vbr=";
 br=":br=";
 acopy=" ";
 cout<<"vbr mode [0-4]"<<endl
     <<"0 cbr(const bitrate)"<<endl
     <<"1 mt"<<endl
     <<"2 rh"<<endl
     <<"3 abr(average bitrate)"<<endl
     <<"4 mtrh"<<endl
     <<"vbr : ";
 vbrType=getString(0,4);
 cout<<"mp3 bitrate(32-320) : ";
 lameBr=getString(32,320);
 lameStr=vbr+vbrType+br+lameBr;
}    
cout<<lameStr<<endl;//контроль. здесь видим ..vbr=x:br=xxx 
а в строке на выполнение :br=xxx пропадает
причём если vbr=x задать вручную а не через ф-ю норм.

да "код" странный, но и прога первая...

S_Paul ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.