3

我有这段代码;它在您直接将参数写入 时有效system(),如果您将参数传递给它则无效。请问有什么帮助吗?

char dest[100];
char file[50];
char dir[100];

printf("Enter source path: ");
scanf("%s", dir);

printf("Enter filename: ");
scanf("%s", file);

printf("Enter destination path: ");
scanf("%s", dest);

system("move \"c:\\users\\putty.exe\" g:\\ \n" );  /* <--works        */
system("move \"%s%s\" %s", dir,file,dest);         /* <--doesn't work */
4

2 回答 2

5

你可以试试这个

char dest[100];
char file[50];
char dir[100];
char command[300];
printf("Enter source path: ");
scanf("%s", dir);
printf("Enter filename: ");
scanf("%s", file);
printf("Enter destination path: ");
scanf("%s", dest);
sprintf(command,"move %s%s %s", dir,file,dest);  
system(command); 
于 2013-01-23T04:26:00.973 回答
3

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。

于 2013-01-23T04:23:29.383 回答