我写了一个程序来使用';'来分割输入字符串 作为终结符并打印在';'之后的字符串部分.每当子串跟随';'时,程序显示正确的输出 在输入字符串中不是有效的终端命令,但也打印command not found.另一方面,当子串后跟';'时,它不会打印任何内容 是一个有效的终端命令,并将子串作为命令执行,例如,如果输入"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;
}
Run Code Online (Sandbox Code Playgroud)
DYZ*_*DYZ 15
当你执行你的程序时:
your_program_name sjhjh;ls
Run Code Online (Sandbox Code Playgroud)
在命令行中,您实际上调用了两个程序.第一个是your_program_name sjhjh(所以,argv[1]是"sjhjh"),第二个是ls.您需要的是确保命令行的其余部分未被shell解析,这可以通过正确引用它来完成:
your_program_name 'sjhjh;ls'
Run Code Online (Sandbox Code Playgroud)