2011-11-13 101 views
0

我有具有下面的代碼一個C linux的功能:ÇLinux的警告:賦值時將指針整數,未作鑄造

void A (char *s1, char *s2) 
{ 
... 
*s2 = NULL; 
... 
} 
在此函數中,我把值代入S2

,並在結束放NULL。

代碼:

*s2 = NULL 

生成以下警告: 賦值時將指針整數,未作鑄

我想解決我的代碼,我該怎麼辦呢?

感謝

+0

無論你做什麼,**不要添加演員**!如果沒有提到演員,警告信息會更好。 – pmg

回答

5

您的系統似乎有NULL定義爲像(void *)0。這意味着你的任務正在做的只是警告說 - 從一個指針沒有演員一個整數。你不想把NULLchar變量反正 - 你可能正在尋找:

*s2 = '\0'; 
+0

這實際上只不過是編寫'* s2 = 0;'的醜陋方式 - 記住,字符文字是C中的整型常量,所以在普通的'0'上使用''\ 0'確實沒有任何好處。 .. – Christoph

+3

@Christoph,這聽起來很主觀,但你說得對,'0'也可以。 –

+0

我覺得很重要的一點是,初學者在C語言中,'0'和''\ 0''之間沒有區別,只是後者很難打字; '字符'文字的類型爲'int',這使得人們對C++背景感到困惑,並且'\ 0''的普遍使用並沒有幫助,因爲它暗示它有一些特別的東西,你必須*使用它終止字符串... – Christoph

1

你是混淆了兩個相似條款:

  • NULL(4個字母)→這是一個指針。
  • NUL(3個字母)→這是一個字符(ASCII 0)。
相關問題