Такая вот программа:
int main(int argc, char *argv[])
{
puts(argv[1]);
}
При вводе параметра командной строки вида "C:\Program Files\Test\", программа выведет:
C:\Program Files\Test"
Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?
Поставил VS2004 SP1, толку — нуль
R>Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?
Либо пиши нормальные "невиндовые" пути "
C:/Program Files/Test/", либо пиши
"C:\Program Files\Test\\"
R>Поставил VS2004 SP1, толку — нуль
Было бы странно, если бы это помогло.
Здравствуйте, Аноним, Вы писали:
R>>Ну прям как на C, '\"' заменяется на '"'. Как избавится от этого косяка?
А>Либо пиши нормальные "невиндовые" пути "C:/Program Files/Test/", либо пиши
А>"C:\Program Files\Test\\"
Отличный совет, Аноним! Хорошо хоть на BSD не посоветовал перейти. Сколько же программ пользуют такой интерфейс через заднее место? Одно не могу взять в толк, причем C-строки и интерфейс командной строки.
R>>Поставил VS2004 SP1, толку — нуль
А>Было бы странно, если бы это помогло.
Да я готов, хоть святой водичкой побрызгать, лишь бы помогло.
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Спасибо всем за понимание за ценные ответы, а также камрадам 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, дельного давно уже ничего не слышал
Здравствуйте, rivitna, Вы писали:
R>PS: Лишний раз убедился, что обнищал RSDN, дельного давно уже ничего не слышал
поплачь..
Здравствуйте, neFormal, Вы писали:
F>Здравствуйте, rivitna, Вы писали:
R>>PS: Лишний раз убедился, что обнищал RSDN, дельного давно уже ничего не слышал
F>поплачь..
лучше наваляю
Здравствуйте, rivitna, Вы писали:
F>>поплачь..
R>лучше наваляю
только без истерик
Здравствуйте, neFormal, Вы писали:
F>Здравствуйте, rivitna, Вы писали:
F>>>поплачь..
R>>лучше наваляю
F>только без истерик
Ладно, пойду сдавать билет в Питер, пиши игрушки дальше