我也尝试从基本名称中获取命令。这就是为什么我在分析行后使用这样的东西......
while (*line == ' ' || *line == '\n')
*line++ = '\0';
line = basename(line); // base
*argv++ = line;
好的basename似乎运行良好,但如果我输入像ls -l这样的命令,那么它会出错...
inout和输出是这样的
ls
arg[0]: 'ls' and arg[1]: '(null)'
shellTest
bin/ls
arg[0]: 'ls' and arg[1]: '(null)'
shellTest
ls -l
arg[0]: '-l' and arg[1]: '-l'
Execution of the command is failed
: No such file or directory
如果我删除line = basename(line);
,那么除了basename之外一切正常,所以解析不能成为问题......
如何解决此问题?
答案 0 :(得分:0)
问题可能出在使用basename()
的周围代码中。 basename()
的POSIX标准说:
说明
basename()
函数应采用path指向的路径名,并返回指向路径名最后一个组件的指针,删除任何尾随的'/'
个字符。如果path指向的字符串完全由
'/'
字符组成,basename()
将返回指向字符串"/"
的指针。如果path指向的字符串正好是"//"
,则无论是'/'
还是"//"
都返回了实现定义。如果path是空指针或指向空字符串,
basename()
将返回指向字符串"."
的指针。
basename()
函数可以修改path指向的字符串,并且可以返回指向静态存储的指针,然后可以通过对basename()
的后续调用覆盖该指针。
basename()
函数不一定是线程安全的。返回值
basename()
函数应返回指向路径最终组件的指针。
该规范中有很多蠕动空间。
但它看起来有点像你试图使用相同的空间同时存储两个值,但没有成功。