VS 2005. Ошибка командной строки
От: rivitna  
Дата: 25.01.09 22:39
Оценка:
Такая вот программа:
int main(int argc, char *argv[])
{
  puts(argv[1]);
}


При вводе параметра командной строки вида "C:\Program Files\Test\", программа выведет:
C:\Program Files\Test"
Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?
Поставил VS2004 SP1, толку — нуль
Re: VS 2005. Ошибка командной строки
От: Аноним  
Дата: 26.01.09 07:50
Оценка:
R>Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?
Либо пиши нормальные "невиндовые" пути "C:/Program Files/Test/", либо пиши
"C:\Program Files\Test\\"

R>Поставил VS2004 SP1, толку — нуль


Было бы странно, если бы это помогло.
Re[2]: VS 2005. Ошибка командной строки
От: rivitna  
Дата: 26.01.09 08:05
Оценка: -2
Здравствуйте, Аноним, Вы писали:

R>>Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?

А>Либо пиши нормальные "невиндовые" пути "C:/Program Files/Test/", либо пиши
А>"C:\Program Files\Test\\"

Отличный совет, Аноним! Хорошо хоть на BSD не посоветовал перейти. Сколько же программ пользуют такой интерфейс через заднее место? Одно не могу взять в толк, причем C-строки и интерфейс командной строки.

R>>Поставил VS2004 SP1, толку — нуль


А>Было бы странно, если бы это помогло.


Да я готов, хоть святой водичкой побрызгать, лишь бы помогло.
Re: VS 2005. Ошибка командной строки
От: Vain Россия google.ru
Дата: 26.01.09 11:17
Оценка:
Здравствуйте, rivitna, Вы писали:

R>При вводе параметра командной строки вида "C:\Program Files\Test\", программа выведет:

R>C:\Program Files\Test"
R>Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?
Про это написано здесь
Автор(ы): Андрей Дибров
Дата: 15.03.2008
Данная статья позиционируется как дополнение к неосвещённым проблемам в bat-скриптах. Особое внимание уделено примерам, в которых предлагается рассмотреть основные проблемы работы и организации скриптов.
— "Проблема обратного слеша (\)".
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: VS 2005. Ошибка командной строки
От: rivitna  
Дата: 27.01.09 08:49
Оценка:
Спасибо всем за понимание за ценные ответы, а также камрадам fortuna и VVP за столь высокие оценки!

И все же проблема в Visual Studio!!! А проблема "обратного слеша" лишь следствие, ведь cmd.exe тоже написан при помощи все того же Visual Studio.

После дизассемблирования все стало предельно ясно.
Это скорее не косяк, а подход команды Microsoft к разбору командной строки
Вся проблема в CRT-ной функции _parse_cmdline, вызываемой в __setargv, которая в свою очередь — в __tmainCRTStartup:

...
loc_4027F0:
inc   esi
inc   ecx

loc_4027F2:
cmp   byte ptr [esi],'\'
jz    short loc_4027F0
cmp   byte ptr [esi],'"'
jz    short loc_402822
...


В итоге, для решения данной проблемы лучше парсить ::GetCommandLine() самому.

PS: Лишний раз убедился, что обнищал RSDN, дельного давно уже ничего не слышал
Re[2]: VS 2005. Ошибка командной строки
От: neFormal Россия  
Дата: 27.01.09 10:16
Оценка:
Здравствуйте, rivitna, Вы писали:

R>PS: Лишний раз убедился, что обнищал RSDN, дельного давно уже ничего не слышал


поплачь..
...coding for chaos...
Re[3]: VS 2005. Ошибка командной строки
От: rivitna  
Дата: 27.01.09 10:17
Оценка: :)
Здравствуйте, neFormal, Вы писали:

F>Здравствуйте, rivitna, Вы писали:


R>>PS: Лишний раз убедился, что обнищал RSDN, дельного давно уже ничего не слышал


F>поплачь..

лучше наваляю
Re[4]: VS 2005. Ошибка командной строки
От: neFormal Россия  
Дата: 27.01.09 10:24
Оценка:
Здравствуйте, rivitna, Вы писали:

F>>поплачь..

R>лучше наваляю

только без истерик
...coding for chaos...
Re[5]: VS 2005. Ошибка командной строки
От: rivitna  
Дата: 27.01.09 10:27
Оценка:
Здравствуйте, neFormal, Вы писали:

F>Здравствуйте, rivitna, Вы писали:


F>>>поплачь..

R>>лучше наваляю

F>только без истерик


Ладно, пойду сдавать билет в Питер, пиши игрушки дальше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.