我正在使用一個C應用程序,該應用程序由Java應用程序測試,在Eclipse中運行。 Java應用程序運行C應用程序,使用的標準方式:如何避免由Eclipse運行的C應用程序中的不可複製字符
Runtime.getRuntime().exec(cmdline)
(該cmdline
含C應用程序的可執行文件)
C應用程序最有可能使用Visual Studio的vsprintf()
函數寫的東西,但在某些情況下,不可複製的字符似乎是打印的,因爲你可以看到:
put_log(LOG_INFO, "Waiting for writing thread\n");
(put_log()
是最有可能基於所提到的vsprintf()
)
PS -ef 這被在Eclipse中顯示爲:
INFO : aiting for writing thread
正如你看到的,「W」已經消失,而在最重要的是,當我嘗試複製提到的線,我只看到:
INFO :
我有信W
已取代一個字符,這是不可拷貝到Windows剪貼板的印象。因爲這發生在相當大的輸出中,所以這非常煩人。
有人明白髮生了什麼事情,我該如何解決這個問題?
作爲問由Fluter,特此put_log()
功能的摘錄:
void put_log(const char *fmt, ...)
{
static char str[16384];
char* args;
char* p = str;
strcpy(str, "INFO: ");
p = str + strlen(str);
_crt_va_start(args, fmt);
vsprintf(p, fmt, args);
_crt_va_end(args);
...
}
(第一個參數(LOG_INFO
)從該摘錄移除和更換由"INFO: "
硬編碼串爲了簡化的目的)
爲了您的信息,特此位置的低級功能:
- _crt_va_start():c:\ P rogram文件(x86)\微軟的Visual Studio 12.0 \ VC \包括\ STDARG.H
- _crt_va_end():C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ VC \包括\ STDARG.H
- vsprintf中():C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ VC \ CRT \ SRC \ vsprintf.c
感謝
請發佈put_log的C程序 – fluter
爲什麼你的例子說'INFO:'但代碼說'INFO:'。這是錯誤還是錯誤的一部分? – Lundin
你好@Lundin,確實是一個錯字。 – Dominique