2011-08-24 61 views
0

我tryng获得从基本名称的命令以及..这就是为什么我使用这样的解析行后的原因...外壳基本名称错误

while (*line == ' ' || *line == '\n') 
         *line++ = '\0';  

        line = basename(line); // base 
        *argv++ = line;    

以及基本名称似乎运作良好,但如果我把如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()函数应采取的路径名由路径指向和指针返回到路径名的最后一个组件,删除任何尾随'/'字符。

如果路径指向的字符串完全由'/'字符组成,则basename()应返回指向字符串"/"的指针。如果path指向的字符串正好是"//",则返回'/'还是"//",这是实现定义的。

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

basename()函数可能会修改path指向的字符串,并且可能会返回一个指向静态存储的指针,然后可能会被随后调用basename()而被覆盖。

basename()函数不需要线程安全。

返回值

basename()功能必须返回一个指针路径的最后部分。

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

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