我编写了一个程序来使用“;”拆分输入字符串作为终止符并打印';'之后的字符串部分。只要子字符串跟在“;”之后,程序就会显示正确的输出输入字符串中的不是有效的终端命令,但还会打印 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;
}
最佳答案
当你执行你的程序时:
your_program_name sjhjh;ls
在命令行上,您实际上调用了两个 程序。第一个是 your_program_name sjhjh
(所以,argv[1]
是 "sjhjh"
),第二个是 ls
。您需要的是确保命令行的其余部分不被 shell 解析,这是通过正确引用它来实现的:
your_program_name 'sjhjh;ls'
关于c - 输入中的 ';' 字符被误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647861/