我正在编写一个包含ABOUT页面的C程序。我在想当用户选择阅读该页面时,控制台会清除(就像我在linux bash中执行clear命令一样)并显示有关页面内容的内容。 浏览了一下后我发现了这个解决方案:
system("clear");
这可以吗?我的意思是,这在程序中使用是否安全?有哪些优点和缺点?
答案 0 :(得分:8)
在某种意义上system
是标准C库的一部分,函数本身是完全安全的。问题出在呼叫的命令部分,即示例中的"clear"
。这与系统密切相关,使您的程序不可移植。
此问题的常见解决方案是与程序分开提供命令(例如,在文件中),或者在有条件编译的代码的一部分中定义命令。第一种解决方案稍微灵活一些,但第二种解决方案更容易实现。
我如何实现一个解决方案,为Linux终端执行
system("clear")
,为Windows终端执行system("cls")
?
使用条件编译的方法如下:首先,将这些定义放在程序中
#ifdef WIN_TERMINAL
#define CLEAR_COMMAND "cls"
#endif
#ifdef UNIX_TERMINAL
#define CLEAR_COMMAND "clear"
#endif
现在在您的代码中使用此命令:
system(CLEAR_COMMAND);
在UNIX上编译时,在编译程序时传递-D UNIX_TERMINAL
。这通常会进入您的Makefile
。在Windows上,将/D WIN_TERMINAL
传递给编译器。这通常位于Visual Studio项目的预处理程序标志列表中。
答案 1 :(得分:2)
优势:这是一种快速,定义明确的方法,因为没有其他“就绪功能”来执行此操作。
缺点:它取决于操作系统。在Windows上,您需要使用system("cls")
。
答案 2 :(得分:0)
通过系统运行命令有很多缺点。首先是平台的安全隐患和差异。
理想情况下,您应该打印平台转义序列以产生所需的结果,或者与平台API接口。这将减少cls / clear命令所存在的依赖关系,并且如果这些命令不是标准命令,则可以防止意外结果。