shell basename错误

时间:2011-08-24 03:38:08

标签: c

我也尝试从基本名称中获取命令。这就是为什么我在分析行后使用这样的东西......

 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之外一切正常,所以解析不能成为问题......

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

问题可能出在使用basename()的周围代码中。 basename()的POSIX标准说:

  

说明

     

basename()函数应采用path指向的路径名,并返回指向路径名最后一个组件的指针,删除任何尾随的'/'个字符。

     

如果path指向的字符串完全由'/'字符组成,basename()将返回指向字符串"/"的指针。如果path指向的字符串正好是"//",则无论是'/'还是"//"都返回了实现定义。

     

如果path是空指针或指向空字符串,basename()将返回指向字符串"."的指针。

     

basename()函数可以修改path指向的字符串,并且可以返回指向静态存储的指针,然后可以通过对basename()的后续调用覆盖该指针。

     

basename()函数不一定是线程安全的。

     

返回值

     

basename()函数应返回指向路径最终组件的指针。

该规范中有很多蠕动空间。

但它看起来有点像你试图使用相同的空间同时存储两个值,但没有成功。