星号精度规格不适用于cygwin

时间:2017-02-26 20:58:24

标签: printf

我在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网站,星号精度规范应该正常工作。

1 个答案:

答案 0 :(得分:0)

哎呀,没关系;我想通了。

我必须将sprint语句更改为

sprintf( szFunction, "%.*s\t%s:%d\r\n", 124 - lstrlen( pszSrcFile ) - (int) log10( nLineNo ), pszFunction, pszSrcFile, nLineNo );