2011-08-24 58 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()功能必須返回一個指針路徑的最後部分。

該規範中有很多蠕動空間。

但它看起來有點像您試圖使用相同的空間來同時存儲兩個值,但不成功。