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);
}
4

1 に答える 1

2

あなたが示したコードは実際には出力を生成しないので、あなたが話している「出力」はデバッガーから来ているのではないかと思いますWinExec.

デバッガーは、多くの場合、デバッグ中の言語の構文を使用して変数の値を表示します。この場合のデバッガーは、文字列変数に引用符が含まれていることを示しています。引用符は C++ では特別なので、デバッガーはバックスラッシュも表示して、引用符が文字列の内容の一部であり、文字列値の開始または終了を示すものではないことを示します。

デバッガーにバックスラッシュが表示されている場合は、すべて問題ありません。プログラムのどこかにバックスラッシュが印刷または表示されている場合は、問題のコードには何も表示されないため、そのコードを確認する必要があります。

于 2012-06-18T14:12:35.417 に答える