在使用C的Linux上执行从键盘键入的命令时出现奇怪的错误

在使用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

我正在学习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);
有人能告诉我为什么我的代码不能与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,你就知道并不是每件事都是可行的。