为什么在C和C ++中应避免使用system()函数?

我在论坛上看到很多人都在回避该system()功能,例如system("cls")。我不明白为什么。

请告诉我为什么我应该避免使用此功能。而且,由于clrscr()无法使用CodeBlocks,在不使用该system()功能的情况下清除屏幕的其他方法有哪些?


狐的传说
浏览 1105回答 3
3回答

一只名叫tom的猫

这里有多个问题:首先,system()作为一个功能是跨平台的,不仅在Windows或Linux上可用。但是,实际调用的程序可能取决于平台。例如,您可以system()用来创建目录:system("md Temp")。这仅适用于Windows,因为Linux不知道名为的命令md。对于Linux,它必须是system("mkdir Temp")。这种情况持续发生,因此您需要为每个平台使用自定义解决方案。这将始终产生一个子进程,然后该子进程将执行某些操作。通常,这比某些内联代码要慢,例如,必须加载命令或程序,加载其自身的依赖项,然后必须执行等等,这通常需要做很多工作。如果您只是在一个平台上进行一些快速测试,则使用它system()是很好的选择,但除非真正需要,否则不要在生产环境中使用它。例如,您可以允许用户设置一个外部程序,然后执行该程序。对于这样的事情system()是完全可以的。

白衣染霜花

关于system()用法有一个答案。而且没有清除控制台窗口的标准C ++方法。对于Windows平台,您可以使用以下代码:void clear()&nbsp;{&nbsp; &nbsp; COORD startPos&nbsp; = { 0, 0 };&nbsp; &nbsp; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);&nbsp; &nbsp; CONSOLE_SCREEN_BUFFER_INFO screen;&nbsp; &nbsp; DWORD written;&nbsp; &nbsp; GetConsoleScreenBufferInfo(hConsole, &screen);&nbsp; &nbsp; FillConsoleOutputCharacterA(hConsole, ' ', screen.dwSize.X * screen.dwSize.Y, startPos, &written);&nbsp; &nbsp; FillConsoleOutputAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize.X * screen.dwSize.Y, startPos, &written);&nbsp; &nbsp; SetConsoleCursorPosition(hConsole, startPos);}对于linux,从未尝试过,但是找到了方法:#include <curses.h>erase();
打开App,查看更多内容
随时随地看视频慕课网APP