2013-02-03 74 views
0

我試圖做類似什麼是最好的方式來擺脫字符串文字末尾的 0?

strcmp(argv[3], "stdout") 
然而

,在命令行中我不想鍵入

stdout\0 

什麼是獲得在擺脫\ 0的最佳方式字符串文字的結尾?

謝謝!

更新:

謝謝你們。我發現有什麼錯我的代碼...我應該用

strcmp(argv[3], "stdout") == 0 

感謝@Nicol流星錘

+3

NULL終止符不用作比較的一部分。如果你確實刪除了它,那麼strcmp將不知道何時停止。嘗試描述你遇到的實際問題。 –

+0

@RetiredNinja我正在嘗試「.a.out stdout」。在我的代碼中,我做了if(strcmp(argv [1],「stdout」))。它不起作用。它只適用於我在命令行中輸入「.a.out stdout \ 0」 – JASON

+0

我假設,在'。/'部分,你使用的是某種形式的Linux/Unix shell,是的? –

回答

3

您不必鍵入「標準輸出\ 0」的命令行。無論您的系統如何使命令行參數可用於您的進程(它因操作系統而異)都會自動添加空字符。如你所知,一個C風格的字符串被空字符終止,該字符在代碼中被寫爲'\ 0'。如果該字符不在字符串的末尾,那麼函數(如strcmp)將繼續超出字符串的末尾,因爲這樣的字符串不成立。但是,由於終止空字符是C約定,編譯器足夠聰明,可以將空字符添加到字符串文本的末尾,並且系統足夠聰明,可以將空字符添加到存儲在命令行參數中記憶一個新創建的過程。如果argc大於3,並且在程序的命令行中輸入的第三個參數是「stdout」,則調用strcmp(argv[3], "stdout")將返回0,表示這兩個字符串匹配。

2

在大多數情況下,您不需要輸入\0。字符串文字有一個隱含地附加到它們的\0,並且將字符串數據存儲到字符數組的C函數將在末尾附加\0(這就是爲什麼許多這些函數的文檔指定您的字符緩衝區必須有足夠的空間用於字符串和空終止符)。

2

字符串文字由來自源代碼字符集零個或多個字符由雙引號(「)包圍。字符串文字表示,加在一起的字符序列,形成一個空終止字符串。

strcmp開始比較每個字符串的第一個字符,如果它們彼此相等,則繼續使用以下對,直到字符不同或者直到達到終止空字符爲止

因此,您不需要在stdout的末尾寫\0,則需要比較返回值strcmp0

if (strcmp(argv[3], "stdout") == 0) 
相關問題