该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。