亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在C和C ++中應避免使用system()函數?

為什么在C和C ++中應避免使用system()函數?

C++ C
狐的傳說 2019-11-19 14:37:53
我在論壇上看到很多人都在回避該system()功能,例如system("cls")。我不明白為什么。請告訴我為什么我應該避免使用此功能。而且,由于clrscr()無法使用CodeBlocks,在不使用該system()功能的情況下清除屏幕的其他方法有哪些?
查看完整描述

3 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

這里有多個問題:

  • 首先,system()作為一個功能是跨平臺的,不僅在Windows或Linux上可用。但是,實際調用的程序可能取決于平臺。例如,您可以system()用來創建目錄:system("md Temp")。這僅適用于Windows,因為Linux不知道名為的命令md。對于Linux,它必須是system("mkdir Temp")。這種情況持續發生,因此您需要為每個平臺使用自定義解決方案。

  • 這將始終產生一個子進程,然后該子進程將執行某些操作。通常,這比某些內聯代碼要慢,例如,必須加載命令或程序,加載其自身的依賴項,然后必須執行等等,這通常需要做很多工作。

如果您只是在一個平臺上進行一些快速測試,則使用它system()是很好的選擇,但除非真正需要,否則不要在生產環境中使用它。例如,您可以允許用戶設置一個外部程序,然后執行該程序。對于這樣的事情system()是完全可以的。


查看完整回答
反對 回復 2019-11-19
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

關于system()用法有一個答案。而且沒有清除控制臺窗口的標準C ++方法。對于Windows平臺,您可以使用以下代碼:


void clear() 

{

    COORD startPos  = { 0, 0 };

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFO screen;

    DWORD written;


    GetConsoleScreenBufferInfo(hConsole, &screen);

    FillConsoleOutputCharacterA(hConsole, ' ', screen.dwSize.X * screen.dwSize.Y, startPos, &written);

    FillConsoleOutputAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize.X * screen.dwSize.Y, startPos, &written);

    SetConsoleCursorPosition(hConsole, startPos);

}

對于linux,從未嘗試過,但是找到了方法:


#include <curses.h>

erase();


查看完整回答
反對 回復 2019-11-19
  • 3 回答
  • 0 關注
  • 1349 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號