[英]Crash on std::cout string
当我尝试执行一个包含字符串对象的简单程序时,在运行时崩溃,我在使用Borland C ++编译器5.5版并使用以下代码:
#include <iostream>
#include <string> // Usaremos as funcoes mais modernas de String em C++
#include <conio.h>
using namespace std;
// <Prototipos >
int MenuPrincipal(void);
void DesenharCentralizado(string String, int CoordY);
// </Prototipos>
int main() {
while(MenuPrincipal() != 0); // Para sair, ele deve retornar 0
return 0;
}
int MenuPrincipal(void) {
string Titulo = "Agenda";
clrscr();
DesenharCentralizado(Titulo, 4);
getch();
return 0;
}
void DesenharCentralizado(string Frase, int CoordY) {
int PosX=wherex(), PosY=wherey();
gotoxy((80-Frase.length())/2, CoordY);
cout << Frase; // XXX CRASH
gotoxy(PosX, PosY);
}
PS:请不要抱怨使用旧的conio.h和这些东西,这些是给我的C ++类的,我的老师正在教我们首先使用它。
如果您注释掉文件中的所有内容并将其替换为
#include <iostream>
int main() { std::cout << "Hello, world!"; }
那样有用吗? 如果是,请尝试
#include <iostream>
#include <string>
int main() { std::cout << std::string( "Hello, world!" ); }
删除<conio.h>
并调用其函数后,您的程序就足够简单,可以指示出一个已损坏的工具链,并且一次添加一个功能可能有助于跟踪发生了什么。 可能是运行时库版本不正确,或者Borland或项目文件的安装中存在某种损坏。
通过一次一次重新创建项目,您可以找到原因,或者最终得到一个可以正常工作的项目,这时您可以忽略问题。
Borland 5.5。 仅部分支持 std::string
。
在这种特殊情况下,很可能是您的代码应归咎于您,但是即使如此,尝试在该编译器中使用std::string
,您也无济于事(而且您将无法很快获得。)
如果您的老师要求您使用Borland 5.5,则您的老师正在尝试自己教书的过程。 有时这种方法还可以,但是请把您的老师送到这里。 现在, 对翼长的老师:
Borland 5.5是一个损坏的工具。 它不只是预标准的:它已损坏。 学生不会从使用中学到任何积极的东西,就像试图在严重失调的钢琴上弹奏钢琴一样。
如果必须支持15年以上的计算机(或更旧的计算机),则可以使用g ++ 2.95或Visual C ++ 6.0。 否则,请使用免费的现代工具,例如(自2012年起)MinGW g ++ 4.6或更高版本,或Visual C ++ 10.0或更高版本。 新的编译器(尽管不是Visual Studio Express IDE)即使在只有265 MB RAM的计算机上也能很好地运行,截至2012年,RAM包含大约十年历史的PC。 Code :: Blocks是旧Windows计算机的不错的IDE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.