在使用C的Linux上执行从键盘键入的命令时出现奇怪的错误
我正在学习Linux上的C代码 我有一个程序来执行从键盘输入的命令行 这是我的密码在使用C的Linux上执行从键盘键入的命令时出现奇怪的错误,c,linux,scanf,C,Linux,Scanf,我正在学习Linux上的C代码 我有一个程序来执行从键盘输入的命令行 这是我的密码 char* command; scanf("%s", command); execl("/bin/sh", "sh", "-c", command, NULL); 它什么也没打印出来 但奇怪的是:如果a不再从键盘输入命令行,我为变量赋值,那么它的工作方式如下: char* command; command = "ls -l"; execl("/bin/sh", "sh", "-c", command, NULL
char* command;
scanf("%s", command);
execl("/bin/sh", "sh", "-c", command, NULL);
它什么也没打印出来
但奇怪的是:如果a不再从键盘输入命令行,我为变量赋值,那么它的工作方式如下:
char* command;
command = "ls -l";
execl("/bin/sh", "sh", "-c", command, NULL);
有人能告诉我为什么我的代码不能与scanf一起工作吗
非常感谢
char* command;
scanf("%s", command);
当调用scanf时,内存并没有分配给命令,所以它会导致未定义的行为,您应该通过以下两种方式分配内存:
command = malloc(256);
或
宣布为
char command[256];
scanf用于读取字符,而不是字符串。它有时可能会工作,但很容易出错。改用标准输入的FGET
例如:
char str[STR_LEN];
fgets(str, STR_LEN , stdin);
请参阅它们之间差异的答案。对不起,这是一种非常糟糕的做法。我这样说并不是因为我有第二个答案,而是因为这个问题的读者可能会认为这是一条路要走,而事实并非如此。有很多这样的链接。如果你理解C,你就知道并不是每件事都是可行的。