有一个奇怪的问题
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 :(得分:2)
由于您显示的代码实际上并没有产生任何输出,我怀疑您所说的“输出”来自您的调试器,您在调用之前尝试检查数组的值WinExec
。
调试器通常使用正在调试的语言的语法显示变量的值。在这种情况下,调试器向您显示字符串变量包含引号。由于引号在C ++中是特殊的,因此调试器还会显示反斜杠以指示引号是字符串内容的一部分,而不是表示字符串值的开头或结尾。
如果你在调试器中看到反斜杠,那么一切都很好。如果您看到打印出的反斜杠或在程序中的某处显示,那么您需要查看那个代码,因为问题中的代码没有显示任何内容。