为system()构造命令行时,为什么会“非法使用指针”?

时间:2011-10-14 18:35:38

标签: c++

我写了这段代码,希望改变控制台窗口的颜色:

char r[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
while(true) {
  cout <<"ololol";
  system("color "<<r[rand()%15]<<r[rand()%15]);
}

我从编译器收到此错误消息:

  

错误E2087 seizure.cpp 11:在函数main()

中非法使用指针

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

试试这个:

std::ostringstream cmd;
cmd << "color " << r[rand()%15]<<r[rand()%15];
system(cmd.str().c_str());

您使用ostringstream进行格式化。 .str()为您提供std::string.c_str()为您提供了一个c风格的字符串,这是system所需要的。

进行测试时,请尝试以下方法:

std::ostringstream cmd;
cmd << "color " << r[rand()%15]<<r[rand()%15];
// system(cmd.str().c_str());
std::cout << cmd.str() << "\n";

这样,你就可以看到你的字符串格式是否意外地炸毁了显示器。