system()C是否正常运行?

时间:2015-05-13 00:05:29

标签: c

我正在编写一个包含ABOUT页面的C程序。我在想当用户选择阅读该页面时,控制台会清除(就像我在linux bash中执行clear命令一样)并显示有关页面内容的内容。 浏览了一下后我发现了这个解决方案:

system("clear");

这可以吗?我的意思是,这在程序中使用是否安全?有哪些优点和缺点?

3 个答案:

答案 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命令所存在的依赖关系,并且如果这些命令不是标准命令,则可以防止意外结果。