首页 > 解决方案 > 不能在 WinAPI 中 _fputts TCHAR 字符串由多个 _tcscat_s 组成

问题描述

WndProc(...)
{
    ...
    TCHAR program_data[10000] = _T("\0");

    OutFromFile(OFN.lpstrFile, program_data, hWnd);
    ...
    SaveFile(SFN.lpstrFile, program_data);
}

// open OFN.lpstrFile file, textout and copy to program_data array
void OutFromFile(TCHAR filename[], TCHAR program_data[], HWND hWnd)
{
    FILE* fPtr;
    TCHAR buffer[500];
    line = 0;
    
    _tfopen_s(&fPtr, filename, _T("r"));
    
    while (_fgetts(buffer, 100, fPtr) != NULL)  
    {
        // remove return character at last
        if (buffer[_tcslen(buffer) - 1] == _T('\n'))    
            buffer[_tcslen(buffer) - 1] = NULL;

        // concatnate buffer to program_data
        _tcscat_s(program_data, 10000, buffer);
        TextOut(hdc, 0, line * 20, buffer, _tcslen(buffer));
        line++;
    }
    fclose(fPtr);

    // TextOut program_data for debugging, it works
    line++;
    TextOut(hdc, 0, line * 20, program_data, _tcslen(program_data));
    ReleaseDC(hWnd, hdc);
}

void SaveFile(TCHAR* filename, TCHAR* program_data)
{
    FILE* fPtr;
    _tfopen_s(&fPtr, filename, _T("w"));

    // ERROR code: print nothing to file
    _fputts(program_data, fPtr);
    fclose(fPtr);
}

在 OutFromFile 中打开文本文件,读取每一行并最后删除返回字符,连接到 program_data。程序 TextOut program_data 但失败 _fputts(program_data, fPtr)。

我怎样才能解决这个问题?

但是这段代码工作正常。

void SaveFile(TCHAR* filename, TCHAR* program_data)
{
    FILE* fPtr;
    _tfopen_s(&fPtr, filename, _T("w"));
    TCHAR str[100] = _T("sample");

    _fputts(str, fPtr);
    fclose(fPtr);
}

标签: c++winapi

解决方案


推荐阅读