我有一个简单的C ++程序,可以在Linux上正常运行,但是当我尝试在Windows上执行它时它会给我这样的东西:
NTVDM CPU遇到非法指令CS:055 IP:0185 OP:00 00
这是该计划的代码:
#include <iostream>
using namespace std;
int main()
{
int n;
do {cout<<"Enter 2 OR 3 : ";cin>>n;} while (n<2 || n>3);
int b;
cout<<"Enter the number of characters : ";cin>>b;cout<<endl;
char t[b];
cout<<"Enter your characters : ";cin>>t;cout<<endl;
string TA =t;
if(n==2) {
for(int r=0;r<b;r++){
for(int i=0;i<b;i++){
cout<<TA[r]<<TA[i]<<endl;
}
}
}
else {
for(int r=0;r<b;r++){
for(int i=0;i<b;i++){
for(int k=0;k<b;k++) {
cout<<TA[r]<<TA[i]<<TA[k]<<endl;
}
}
}
}
cout<<"All Right Reserved ©"<<endl;
return 0;
}
答案 0 :(得分:2)
除了在ISO C ++中不支持可变长度数组并且可能在GCC中通过扩展允许这样的事实之外,您可以从缓冲区溢出开始:数组t
应该至少t[b+1]
长,即便如此,你仍然相信用户不要输入他们承诺的更多角色。
既然您已将t
分配给std::string
(TA
),为什么不直接将输入读入TA
本质安全的内容(更不用说了)有效的ISO C ++)?
string TA ;
cout << "Enter your characters : " ;
cin >> TA ;