Не работает команда if (i==1) tPipe=_popen("logman create counter ch -c ""\Процесс(ch)\""Рабочее множество"""" -f tsv", "rt"); выдает ошибку Недопустимый путь счетчика множество
27.11.11 13:11: Перенесено из 'C/C++'
Здравствуйте, ivanpetr, Вы писали:
I>Не работает команда if (i==1) tPipe=_popen("logman create counter ch -c ""\Процесс(ch)\""Рабочее множество"""" -f tsv", "rt"); выдает ошибку Недопустимый путь счетчика множество
Строка
дважды неправильно закавычена — один раз по-сишному, второй раз — по-командному.
Сдвоенные кавычки в языке си воспринимаются как разрыв строки:
"hello""world" == "hello" "world" == "helloworld"
Бэкслеш — метасимвол, работает в сочетании со следующим(и) за ним симолом(-ами). Например, \\ превращается в \, \" в ", \123 — в букву с восьмеричным кодом 0123. \П — недопустимое сочетание, но компилятор милостиво трактовал его как пару обычных символов.
Аргумент команды — некий
\Процесс(ch)\"Рабочее множество" (или, может быть, просто
\Процесс(ch)\Рабочее множество ?)
нужно сперва закавычить по правилам шелла (это ведь винды, правильно?):
"\Процесс(ch)\""Рабочее множество""" или
"\Процесс(ch)\Рабочее множество" соответственно.
После этого закавычим полученную строку в си
_popen("logman create counter ch -c \"\\Процесс(ch)\\\"\"Рабочее множество\"\"\" -f tsv", "rt");
_popen("logman create counter ch -c \"\\Процесс(ch)\\Рабочее множество\" -f tsv", "rt");