请帮我处理我的代码。我在c中使用system()函数。假设我想使用C代码创建一个新目录。
char name[];
printf("Enter the name of directory: ");
scanf("%s", &name);
然后使用system()
,我想使用变量name[]
而不是像system("mkdir ryan");
那样使用或放置一个固定值,而是创建一个新目录ryan
;我想要发生的是,创建任何目录名称并将其存储到变量name[]
并实现该值而不是ryan
。非常感谢您的回答。
答案 0 :(得分:6)
你应该使用类似的东西:
char name[100];
printf("Enter the name of the directory: ");
if (scanf("%99s", name) == 1) // Not &name
{
char command[120];
sprintf("%s %s", "mkdir", name);
if (system(command) != 0)
...oops...
}
答案 1 :(得分:1)
首先关闭(如果你的代码只是一个例子,这可能并不重要),不要使用无界%s
scanf
- 这会打开你的缓冲区溢出。
如果你有一个字符串:
char name[] = "paxdiablo";
您可以使用它来构建自己的字符串以供执行。
char cmd[1000];
strcpy (cmd, "mkdir ");
strcat (cmd, name);
system (cmd);
并确保知道(或检查strlen
,或动态分配缓冲区,使其足够大)name
的大小,以便您也不会在那里出现缓冲区溢出。
动态分配的一个例子:
void tryMkdir (char *dir) {
static char prefix[] = "mkdir ";
// Use sizeof to allow for null char at end.
char *cmd = malloc (sizeof (prefix) + strlen (dir));
if (cmd != NULL) {
strcpy (cmd, prefix);
strcat (cmd, dir);
system (cmd);
free (cmd);
}
}
(尽管如果mkdir
或malloc
失败,您可能希望在那里进行一些错误检查。)
答案 2 :(得分:1)
这是一个如何实现它的例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
char *dirname = NULL;
char *cmdline = NULL;
size_t len;
size_t dirlen = 0;
int rv = 0;
printf("Enter directory: ");
if ( (len = getline(&dirname, &dirlen, stdin)) < 0) {
perror("getline");
exit(-1);
}
dirname[len-1] = 0;
cmdline = malloc(len+8);
snprintf(cmdline, dirlen+8, "mkdir %s", dirname);
rv = system(cmdline);
free(cmdline);
free(dirname);
rv = WEXITSTATUS(rv);
return rv;
}
答案 3 :(得分:0)
你需要建立一个字符串w /你的完整命令发送到它的system(),这意味着为它分配空间(你没有为原始代码中的名字做,所以你的电话扫描可能会失败)。对于类似mkdir示例的内容,您可以创建一个以mkdir&amp;开头的字符串。在那之后有足够的空间用于你的目录名,当你调用scanf时,将它指向你希望名字去的那个字符串中的位置;保存你不得不做一个strcat或之后的事情,如果这是你唯一需要的目录名,为什么要存储两次呢?
答案 4 :(得分:-3)
尝试:
char command[80];
strcpy(command, "mkdir ");
strcat(command, name);
system(command);