2012-06-18 1 views
0

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

sprintf(tmp, "\"%s\"", filename); 

Я ожидаю, что выход будет

"filename" 

, но вместо этого я получаю

\"filename\" 

Что здесь происходит?

=============================

extern "C" void __export __pascal MyFunc(LPTSTR m_avi, LPTSTR m_mpg) 
{ 
    int frameRate = 20; 
    char szAVI[MAX_PATH], szMPG[MAX_PATH]; 

#ifdef UNICODE 
    wcstombs(szAVI, m_avi, _tcslen(m_avi) + 1); 
    wcstombs(szMPG, m_mpg, _tcslen(m_mpg) + 1); 
#else 
    strcpy(szAVI, m_avi); 
    strcpy(szMPG, m_mpg); 
#endif 

    //Call to ffmpeg.exe 
    char cmdline[1000] = "ffmpeg ", tmp[50]; 

    //Overwrite without asking 
    strcat(cmdline, "-y "); 

    //Input file 
    sprintf(tmp, "-i \"%s\" ", szAVI); 
    strcat(cmdline, tmp); 

    //Lock output at 20 frames per second 
    sprintf(tmp, "-r %i ", frameRate); 
    strcat(cmdline, tmp); 

    //Output file 
    sprintf(tmp, "\"%s\"", szMPG); 
    strcat(cmdline, tmp); 

    WinExec(cmdline, SW_HIDE); 
} 
+0

Можем ли мы увидеть остальную часть программы, как что-то на http://ideone.com? – Potatoswatter

+0

Да, информации здесь недостаточно, чтобы рассказать. Это отлично работает для меня: http://ideone.com/EEhxH – bames53

+0

Возможно, я неправильно понял, что вы делаете, но я не понимаю, что вы получаете. Мой вывод - «имя файла». Можете ли вы опубликовать более крупный пример кода? – Stefan

ответ

2

Поскольку код вы показали не на самом деле производят какой-либо вывод, я подозреваю, что «вывод», о котором вы говорите, поступает из вашего отладчика, где вы пытаетесь проверить значение своего массива, прежде чем вы вызовете WinExec.

Отладчики часто отображают значения переменных, используя синтаксис отлаживаемого языка. Отладчик в этом случае показывает вам, что строковая переменная содержит кавычки. Поскольку кавычки являются специальными в C++, отладчик также отображает обратную косую черту, чтобы указать, что кавычки являются частью содержимого строки, а не обозначают начало или конец строкового значения.

Если вы видите обратную косую черту в отладчике, тогда все в порядке. Если вы видите, что обратная косая черта напечатана или отображается где-то в вашей программе, вам нужно взглянуть на , что код, так как здесь код в этом вопросе ничего не отображает.

+0

Ах ... Я был тупой: p спасибо –