2013-05-03 99 views
1

我想问你为什么这两个代码不相等?相同的代码和不同的结果

没有GUI正常工作:

string str; cin >> str; 

for(int n=0;n<=str.length();n++){ 
    string total; 
    total=conversion(str[n]); 
} 

...但是GUI(QT)在转换函数的输出出现随机字符:

string str = ui->lineEdit->text().toStdString(); 

for(size_t n = 0; n <= str.length(); n++) { 
string total; 
total= conversion(str[n]); 
} 
+0

你可以显示你得到的任何输出(以及你正在打印这个输出的地方)吗? – 2013-05-03 13:53:08

+0

你是否验证过ui-> lineEdit-> text()。toStdString()实际上返回了一些有意义的东西? – Angew 2013-05-03 13:53:45

回答

6
for(int n=0;n<=str.length();n++){ 
    string total; 
    total=conversion(str[n]); 
} 

是因为未定义行为str的出境限制访问,您需要

for(int n=0;n<str.length();n++){ 
    string total; 
    total=conversion(str[n]); 
} 

如果你的程序有不确定的行为,他们会做一些奇怪的事情,比如在一种情况下工作,但不在另一种情况下工作。

+0

你忘了鼻子守护进程 – Gui13 2013-05-03 14:07:42

+0

约翰你的想法不会改变任何东西,我已经用该方法打印输出:QString qstr = QString :: fromStdString(total); QMessageBox msgBox; msgBox.setText(qstr); msgBox.exec();输出结果:èÿÜûÿYèHGüÿÈ – withorlo 2013-05-03 14:33:10

+0

那么也许是'转换'中的一个bug。这是一个错误*某处*。 – john 2013-05-03 14:41:01

相关问题