我编写了一个程序来使用';'来分割输入字符串。作为终结符并打印在'之后的字符串部分;'。只要子串跟随&#39 ;;'程序就会显示正确的输出。在输入字符串中不是有效的终端命令,但也打印command not found
。另一方面,当子串后跟&#39 ;;'时,它不会打印任何内容。是一个有效的终端命令,并将子串作为命令执行,例如,如果输入" sjhjh; ls"它将执行ls命令。
如何摆脱command not found
部分?
这是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char * input;
char * str;
char * word;
char terminator = ';';
if (argc < 2) {
fprintf(stderr,"ERROR, no string provided\n");
exit(1);
}
input = argv[1];
word = strchr(input, terminator);
if (word != NULL) printf("%s\n", word);
return 0;
}
答案 0 :(得分:15)
当您执行以下程序时:
your_program_name sjhjh;ls
在命令行中,您实际上调用了两个程序。第一个是your_program_name sjhjh
(因此,argv[1]
是"sjhjh"
),第二个是ls
。你需要的是确保命令行的其余部分被shell解析,这是通过正确引用它来实现的:
your_program_name 'sjhjh;ls'