C++奇怪的文本行为 - 随机垃圾文本
C++ odd text behavior - random garbage text
已解决
重新安装操作系统(2008 Server)后,我注意到我的程序中发生了一些奇怪的事情。
这是指向部分源 http://phantomworksstudios.com/cpp/ss/sof-odd.h 的链接
首先是代码:
自定义数据.h
class INI_{
public:
const char* error;
stringstream CharToStr2;
Layout layout;
Settings settings;
string file;
int OpenFile(string open_file){
CharToStr2.str("");
ifstream SSMAIN_FILE_SETTINGS;
CharToStr2<<open_file;
cout<<"CharToStr: "<<CharToStr2<<endl;
cout<<"CharToStr.str(): "<<CharToStr2.str()<<endl;
cout<<"CharToStr.str.c_str(): "<<CharToStr2.str().c_str()<<endl;
SSMAIN_FILE_SETTINGS.open(CharToStr2.str().c_str());
if(!SSMAIN_FILE_SETTINGS){
CharToStr2<<" is currupt or not found!. Loading default configuration!";
cout<<"STRING1:"<<CharToStr2<<endl<<endl;
cout<<"STRING2:"<<CharToStr2.str()<<endl<<endl;
cout<<"STRING3:"<<CharToStr2.str().c_str()<<endl<<endl;
error=CharToStr2.str().c_str();
cout<<"ERROR:"<<error<<endl;
}
cout <<"CLASS INI_: "<<SSMAIN_FILE_SETTINGS<<" : "<<file<<endl<<endl;
}
};
INI_ SourceStudioConfiguration;
程序.h
case WM_CREATE:
SSMAIN_EXPLORERWINDOW_MENU=LoadMenu(SSMAIN_HINSTANCE,MAKEINTRESOURCE(ID_EXPLORER_MENU));
SourceStudioConfiguration.layout.cx=0;
User_Buffer=32767;
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken);
GetUserProfileDirectory(hToken,InfoBuf,&User_Buffer);
User_Path=InfoBuf;
// cout<<InfoBuf<<endl<<endl;
CharToStr<<InfoBuf<<"\Source Studio\preference.ini";
preference=CharToStr.str();
cout<<User_Path<<" : "<<preference<<endl<<endl;
// SourceStudioConfiguration.file=preference;
SourceStudioConfiguration.OpenFile(preference);
cout<<"CREATE:"<<SourceStudioConfiguration.error<<endl<<endl;
cout<<"Class File"<<SourceStudioConfiguration.file<<endl<<endl;
hbmPWSBUTTON = (HBITMAP)LoadBitmap(hInst_PWSBUTTON, MAKEINTRESOURCE(IMG_PWS_BUTTON));
cout<<"Load PWS Bitmap: "<<hbmPWSBUTTON<<endl;
hbmPWSCommandOVERVIEW=(HBITMAP)LoadBitmap(hInst_PWSCOMMANDTB, MAKENTRESOURCE(IMG_PWS_COMMAND_OVERVIEW));
hbmPWSCommandDOCUMENT=(HBITMAP)LoadBitmap(hInst_PWSCOMMANDTB, MAKEINTRESOURCE(IMG_PWS_COMMAND_DOCUMENT));
hbmPWSCommandNEWFILE=(HBITMAP)LoadBitmap(hInst_PWSCOMMANDTB, MAKEINTRESOURCE(IMG_PWS_COMMAND_NEWFILE));
hbmPWSCommandCLOSE=(HBITMAP)LoadBitmap(hInst_PWSCOMMANDTB, MAKEINTRESOURCE(IMG_PWS_COMMAND_CLOSE));
cout<<"CREATE:"<<SourceStudioConfiguration.error<<endl<<endl;
cout<<"Load PWS Command Toolbar Bitmap: "<<hbmPWSCommandOVERVIEW<<endl;
cout<<"CREATE 277:"<<SourceStudioConfiguration.error<<endl<<endl;
SSMAIN_REBARWINDOW = CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT, REBARCLASSNAME,NULL, WS_CHILD|WS_BORDER|RBS_VARHEIGHT|TBS_HORZ|RBS_BANDBORDERS|CCS_NODIVIDER|CCS_NOPARENTALIGN,0,0,0,0,hwnd, NULL, 0, 0);
SSMAIN_EXPLORERWINDOW=CreateWindowEx(WS_EX_TRANSPARENT,"button",NULL, BS_GROUPBOX|WS_CHILD,0,79,150,SSMAIN_HEIGHT-157,hwnd, (HMENU)SSMAIN_EXPLORERWINDOW_MENU, SSMAIN_EXPLORERBAR_HINSTANCE, 0);
//SSMAIN_EXPLORERWINDOW_REBAR=CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT, REBARCLASSNAME, NULL, WS_CHILD|WS_BORDER|RBS_VARHEIGHT|TBS_HORZ|RBS_BANDBORDERS|CCS_NODIVIDER|CCS_NOPARENTALIGN, 0,0,0,0,SSMAIN_EXPLORERWINDOW,NULL,0,0);
SSMAIN_NAVIGATIONTOOLBAR=CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT, "TOOLBARWINDOW32", NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|TBSTYLE_TOOLTIPS|TBSTYLE_FLAT|TBSTYLE_ALTDRAG|TBSTYLE_LIST|CCS_NODIVIDER|CCS_NOPARENTALIGN|CCS_ADJUSTABLE|CCS_NORESIZE, 0, 0, 0, 0,SSMAIN_REBARWINDOW, (HMENU)IDC_NAVIGATIONTOOLBAR, GetModuleHandle(NULL), NULL);
SSMAIN_EXPLORERWINDOW_OVERVIEW=CreateWindowEx(0,"button", NULL,BS_BITMAP|BS_USERBUTTON|BS_TEXT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS, 4, 12, 18, 18,SSMAIN_EXPLORERWINDOW, (HMENU)IDC_EXPLORERWINDOW_REBAR_COMMANDBAR, GetModuleHandle(NULL), NULL);
SSMAIN_EXPLORERWINDOW_DOCUMENT=CreateWindowEx(0, "button",NULL,BS_BITMAP|BS_USERBUTTON|BS_TEXT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS, 24, 12, 18, 18,SSMAIN_EXPLORERWINDOW, (HMENU)IDC_EXPLORERWINDOW_REBAR_COMMANDBAR, GetModuleHandle(NULL), NULL);
SSMAIN_EXPLORERWINDOW_NEWFILE=CreateWindowEx(0,"button",NULL, BS_BITMAP|BS_USERBUTTON|BS_TEXT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS, 44, 12, 18, 18,SSMAIN_EXPLORERWINDOW, (HMENU)IDC_EXPLORERWINDOW_REBAR_COMMANDBAR, GetModuleHandle(NULL), NULL);
SSMAIN_EXPLORERWINDOW_CLOSE=CreateWindowEx(0,"button",NULL, BS_BITMAP|BS_USERBUTTON|BS_TEXT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS, 62, 12, 18, 18,SSMAIN_EXPLORERWINDOW, (HMENU)IDC_EXPLORERWINDOW_REBAR_COMMANDBAR, GetModuleHandle(NULL), NULL);
//SSMAIN_PARENTCONTAINER=CreateWindow("SYSTABCONTROL32","", WS_EX_COMPOSITED|WS_CHILD|WS_VISIBLE,100,100,0,0,hwnd,(HMENU)ID_PARENTCONTAINER,SSMAIN_PARENTCONTAINER_HINSTANCE, NULL);
SSMAIN_STATIC_RTF_CONTAINER=CreateWindowEx(WS_EX_TRANSPARENT|WS_EX_CLIENTEDGE, "static","",WS_CHILD,0,0,0,0,hwnd,(HMENU)IDC_STATIC_RTF_CONTAINER,0,0);
SSMAIN_STATIC_RTFCONTROL_PARENT_HSCROLL=CreateWindow("SCROLLBAR","", WS_EX_COMPOSITED|WS_CHILD|WS_VISIBLE|SBS_BOTTOMALIGN,100,100,20,20,SSMAIN_STATIC_RTF_CONTAINER,(HMENU)IDC_STATIC_RTFCONTROL_PARENT_HSCROLL,SSMAIN_PARENTCONTAINER_HINSTANCE,NULL);
SSMAIN_LISTBOXRTFCOUNT= CreateWindowEx(0,"LISTBOX",NULL, WS_CHILD|WS_CLIPSIBLINGS|ECO_AUTOVSCROLL|LBS_NOINTEGRALHEIGHT|LBS_NOTIFY|WS_VISIBLE|WS_GROUP, 0,0,0,0,SSMAIN_STATIC_RTF_CONTAINER,(HMENU)IDC_LISTBOXRTFCOUNT,NULL,NULL);
SSMAIN_RTFCONTROL=CreateWindow("RICHEDIT","text", WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOHSCROLL|WS_VSCROLL|WS_HSCROLL|WS_GROUP, 0,0,0,0,SSMAIN_STATIC_RTF_CONTAINER,(HMENU)IDC_RTFCONTROL,SSMAIN_RTFCONTROL_HINSTANCE,0);
SSMAIN_TOOLBAR=CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT, "TOOLBARWINDOW32", NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|TBSTYLE_TOOLTIPS|TBSTYLE_FLAT|TBSTYLE_ALTDRAG|TBSTYLE_LIST|CCS_NODIVIDER|CCS_NOPARENTALIGN|CCS_ADJUSTABLE|CCS_NORESIZE, 0, 0, 0, 0,hwnd, (HMENU)IDC_TOOLBAR, GetModuleHandle(NULL), NULL);
SSMAIN_STATUSBAR = CreateWindow("MSCTLS_STATUSBAR32", "", WS_EX_COMPOSITED|WS_CHILD|WS_VISIBLE, 100, 100, 0, 0, hwnd, NULL, 0, NULL);
cout<<"CREATE 300:"<<SourceStudioConfiguration.error<<endl<<endl; SendMessage(SSMAIN_STATUSBAR,SB_SETPARTS,(WPARAM)3,(LPARAM)&panes);
SSMAIN_TOOLBARSYNTAX = CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT, "TOOLBARWINDOW32", NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|TBSTYLE_TOOLTIPS|TBSTYLE_FLAT|TBSTYLE_ALTDRAG|TBSTYLE_LIST|CCS_NODIVIDER|CCS_NOPARENTALIGN|CCS_ADJUSTABLE|CCS_NORESIZE, 0, 0, 0, 0,SSMAIN_REBARWINDOW, (HMENU)IDC_TOOLBARSYNTAX, GetModuleHandle(NULL), NULL);
SSMAIN_PWSBUTTON = CreateWindowEx(WS_EX_TRANSPARENT, "static", NULL, SS_BITMAP|TBSTYLE_TOOLTIPS|SS_NOTIFY|WS_CHILD|WS_VISIBLE, 50, 50, 32, 32, hwnd, (HMENU)IDC_PWSBUTTON, 0, 0);
SSMAIN_TOOLTIP = CreateWindowEx(0, TOOLTIPS_CLASS, 0, WS_POPUP|TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, 0, SSMAIN_HINSTANCE, 0);
现在由于某种原因,当我显示cout<<"CREATE 300:"<<SourceStudioConfiguration.error<<endl<<endl;
文本SSMAIN_RTFCONTROL=CreateWindow("RICHEDIT","...
后,文本都是随机文本。现在,如果我之前使用过同样的东西SSMAIN_RTFCONTROL=CreateWindow("RICHEDIT","...
它将正确显示。
我的问题是它为什么要这样做?
此外,如果我忽略SSMAIN_RTFCONTROL=CreateWindow("RICHEDIT","...
作为注释,它将正常工作,但是在cmd窗口上再多几行之后,它将再次显示为随机文本。
我没有看到的吗? 就像太多的信息开始弄乱错误空间一样,也许在其中设置了一些东西而不应该?
另外,据我所知,在重新安装操作系统之前我没有遇到此问题。
谢谢,我对此感到非常困惑,如果您需要更多信息,请告诉我,我会发布它们
另外,伙计们我试图通过应用空格来格式化代码,就像它所说的那样,但有时它不允许在行前面有任何空格,有时它确实如此,所以我不知道这是怎么回事。
好的伙计们,这是解决方案,即使我不知道为什么这是否有意义......
class INI_{
public:
const char* error;
stringstream CharToStr2;
string errordesc;
Layout layout;
Settings settings;
string file;
int OpenFile(string open_file){
CharToStr2.str("");
ifstream SSMAIN_FILE_SETTINGS;
CharToStr2<<open_file;
cout<<"CharToStr: "<<CharToStr2<<endl;
cout<<"CharToStr.str(): "<<CharToStr2.str()<<endl;
cout<<"CharToStr.str.c_str(): "<<CharToStr2.str().c_str()<<endl;
SSMAIN_FILE_SETTINGS.open(CharToStr2.str().c_str());
if(!SSMAIN_FILE_SETTINGS){
CharToStr2<<" is currupt or not found!. Loading default configuration!";
cout<<"STRING1:"<<CharToStr2<<endl<<endl;
cout<<"STRING2:"<<CharToStr2.str()<<endl<<endl;
cout<<"STRING3:"<<CharToStr2.str().c_str()<<endl<<endl;
errordesc=CharToStr2.str();
error=errordesc.c_str();
cout<<"ERROR:"<<error<<endl;
}
cout <<"CLASS INI_: "<<SSMAIN_FILE_SETTINGS<<" : "<<file<<endl<<endl;
}
};
注意到我添加了一个变量字符串 errordesc 并将源流分配给它,然后将 errordesc 分配给错误
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 文本文件中的单词链表
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 从文本文件中随机选取一行
- C 文本写入随机数据.是否有缓冲区溢出
- 随机访问文件格式,用于分层组织的二进制文件和文本文件
- 需要帮助 在文本文件中随机生成 54 副牌
- 如何从键盘读取完整的随机文本,过滤和投射
- 将随机整数写入文本文件而不重复
- 读取文本文件并随机播放
- 将字符输出随机化为文本文件
- C++:从文本文件中读取随机行
- C++ - 随机访问多个文本文件的行
- C++奇怪的文本行为 - 随机垃圾文本
- 使用 ifstream 读取列中随机生成的数字的文本文件,并从列表中查找最小值和最大值
- 以随机访问方式更改文本文件
- 随机化项目列表并将其输出到文本文件
- 从文本文件中随机选择K行
- 为什么当我将数字添加到字符串时,它在c++中显示随机文本
- 获取字符串从文本文件打印随机行时出现问题