我在Cygwin gcc编译器集合中使用以下C ++代码:
void WINAPI debugEnterFunction( LPCSTR pszFunction, LPCSTR pszSrcFile, int nLineNo )
{
char szFunction[128];
sprintf( szFunction, "%.*s\t%s:%d\r\n", 124 - lstrlen( pszSrcFile ) - log10( nLineNo ), pszFunction, pszSrcFile, nLineNo );
// More code goes here.
}
程序在第一次执行sprintf语句时崩溃,其中对应于星号规范的参数是108.如果我将szFunction的长度从128更改为1028,它仍然会崩溃。如果我将sprintf语句更改为以下内容:
sprintf( szFunction, "%.80s\t%s:%d\r\n", pszFunction, pszSrcFile, nLineNo );
然后它运作正常。
使用Cygwin gcc编译器集合时是否存在与星号精度规范的使用有关的问题?根据GNU网站,星号精度规范应该正常工作。
答案 0 :(得分:0)
我必须将sprint语句更改为
sprintf( szFunction, "%.*s\t%s:%d\r\n", 124 - lstrlen( pszSrcFile ) - (int) log10( nLineNo ), pszFunction, pszSrcFile, nLineNo );