在std :: cout字符串上崩溃

时间:2012-04-22 02:15:42

标签: c++ string crash

我在尝试执行cout是一个字符串对象的简单程序时遇到运行时崩溃,我正在使用Borland C ++ Compiler 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 ++课程,我的老师教我们先用它...

2 个答案:

答案 0 :(得分:2)

如果您注释掉文件中的所有内容并将其替换为

#include <iostream>
int main() { std::cout << "Hello, world!"; }

有效吗?如果是,请尝试

#include <iostream>
#include <string>
int main() { std::cout << std::string( "Hello, world!" ); }

删除<conio.h>并调用其函数后,您的程序非常简单,可以指示工具链损坏,并且一次添加一个功能可能有助于追踪已损坏的内容。它可能是一个不正确的运行时库版本,或者在安装Borland或项目文件时出现某种损坏。

通过一次一步地重新创建项目,您要么追踪原因,要么最终得到一个工作项目,此时您可以忘记问题。

答案 1 :(得分:1)

Borland 5.5。只有std::string部分支持

在这种特殊情况下,您的代码可能会受到责备,但即便如此,您也无法在任何地方(并且您将无法获得更快的速度)尝试在该编译器中使用std::string

如果您的老师要求您使用Borland 5.5,那么您的老师正在努力教他或她自己,因为他/她在教您。这种方法有时可以,但请将您的老师送到这里。现在,到wingleader的老师:

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年,它包含了几十年前的PC。 Code :: Blocks是旧Windows计算机的一个很好的IDE。