2015-06-13 107 views
-1

我得到奇怪的問題,從argv[]解析C++參數。下面是一些代碼示例:C++ argv [1]奇怪的東西

int main(int argc, char **argv) { 
    for (int i=0; i <argc; i++) 
     printf("argv[%d] = %s|\n", i, argv[i]); 
    return 0; 
}; 

當我運行這個程序是這樣的:

./myprogram --aaa-a --bbb-b --ccc-c 

結果我得到的是這樣的:

argv[0] = myprogram| 
argv[1] = --aaa-a --bbb-b| 
argv[2] = --ccc-c 

但是當我嘗試:

./myprogram --aaa-a --bbb-b --ccc-c 

與aa之間還有額外的空間a nd bb,我得到了:

argv[0] = myprogram| 
argv[1] = --aaa-a| 
argv[2] = --bbb-b| 
argv[3] = --ccc-c| 

有沒有人可以給我一個線索這裏發生了什麼?

+0

你在用什麼外殼? –

+0

@zenith:是的,你說得對。 @ Matt McNabb:標準的Debian破折號。 也我刪除了-O2標誌,現在它按預期工作。 –

+2

不是[重現](http://coliru.stacked-crooked.com/a/852e8bf3919cfd2f)。你將不得不提供更精確的信息(環境,編譯器,編譯參數等)。 –

回答

2

由於某種原因,您的non-breakable space(或顯示爲空格的任何字符)在--aaa-a--bbb-b之間。刪除整個命令行並重新寫入。

+1

另外,如果這是問題,那麼到OP:請實際上覆制和粘貼。不要只是在你的問題中重新輸入你的代碼,輸入和輸出。如果你已經複製並粘貼,那麼非破壞空間就是問題的一部分,我們可以驗證這是問題所在。 – hvd