2012-06-18 49 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謝謝 –