c++ - 不能在 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);
}
解决方案
推荐阅读
- php - Laravel 6.0 不支持 DELETE、PUT 方法
- sql - SUM 结果乘以行数
- gatsby - 使用 NGINX 问题服务 gatsby 生产
- node.js - 用于页面的 Nodejs Facebook 聊天机器人
- flutter - 如何在 ExpansionTile Flutter 中使用动态 TextField 控制器
- hibernate - 更改架构文件名后的 Corda SQLGrammarException
- html - 如何使用 rel="preload" 和 Angular 的散列文件名预加载内容?
- css - 如何根据字体大小计算高度?
- docker - 在构建容器时导入数据源和 grafana 仪表板
- python - Python tkinter 使用画布创建带有滚动条的动态窗口