windows OutputDebugString()在“以null结尾的字符串太长且1个以null结尾的字符串..”时不起作用,

mefy6pfw  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(120)

我正在使用Visual Studio 2022社区。
由于某些原因,我使用OutputDebugString()处理很长的字符串。有时候,它不起作用。
我发现了什么。
当字符串长度大于1024 * 32时,OutputDebugString()不起作用。
为了让这样长的字符串与OutputDebugString()一起工作,我必须在字符串的末尾添加2个NULL。
这是预期的行动吗??

#include <stdio.h>
#include <windows.h>
#include <tchar.h>

void testOutputDebugging( int sizeBuf ) {
    TCHAR *buf = (TCHAR *)calloc( sizeBuf * sizeof( TCHAR ), 1 );
    for( int i = 0; i < sizeBuf - 1; i++ )
        buf[ i ] = _T( 'A' );

    TCHAR buf2[32];
    _stprintf_s( buf2, 32, _T( "\nsize=%d\n" ), sizeBuf );
    OutputDebugString( buf2 );
    OutputDebugString( buf );
    OutputDebugString( buf2 );
    free( buf );
}

int main() {
    testOutputDebugging( 1024 );
    testOutputDebugging( 1024 * 16 );
    testOutputDebugging( 1024 * 17 );
    testOutputDebugging( 1024 * 32 );
    return 0;
}

字符串
我用VS2022运行了。结果屏幕截图如下所示..


的数据

dxxyhpgq

dxxyhpgq1#

我发现从字符串中删除'\r'解决了这个问题。当字符串包含'\r'字符时,函数OutputDebugString()有时只显示20个字符,但当我扫描字符串并将'\r'替换为空格时,我可以在一次OutputDebugString()调用中显示500多个字符。

相关问题