该system()
命令不是snprintf()
替代品。您需要使用snprintf()
然后system()
:
char command[1024];
...
snprintf(command, sizeof(command), "move \"%s%s\" %s", dir, file, dest);
system(command);
或者,鉴于您在 Windows 上,您可以使用snprintf_s()
而不是snprintf()
. 您可能还注意到,如果用户没有在dir
值的末尾留下反斜杠,那么目录和文件名的最后一个组成部分会组合在一起。您可能应该使用:
snprintf(command, sizeof(command), "move \"%s\\%s\" %s", dir, file, dest);
尽管 Windows 内核对路径名中的斜杠非常满意,但命令处理器却不那么满意。由于您不是直接调用操作系统,而是调用命令处理器来运行程序,因此我相信您需要使用反斜杠。
请注意,您的编译器应该已经告诉您您没有system()
正确调用。标头是<stdlib.h>
并且表明该函数只接受一个参数。
ISO/IEC 9899:2011 §7.22.4.8system
功能
概要
¶1#include <stdlib.h>
int system(const char *string);
描述
¶2 如果 string 是空指针,则该system
函数确定主机环境是否具有命令处理器。如果 string 不是空指针,则该system
函数将指向的字符串传递string
给该命令处理器,以按照实现应记录的方式执行;这可能会导致程序调用system
以不符合的方式运行或终止。
如果您的编译器没有告诉您您system()
在第二次调用时误用了,或者没有抱怨system()
在使用之前声明的内容,那么您需要在编译时调高警告级别,或者获得更好的编译器。如果它在警告您,您需要注意它所说的内容。请记住,编译器比您更了解 C。