2010-05-31 81 views
1

如何刪除這些警告?如何在刪除c字符串時刪除這些警告

char foo[10], msg2[100]; 
    int k; 
    for (k = 0; foo[k] != NULL; k++) //comparison between pointer and integer 
     msg2[k] = NULL; //assignment makes integer from pointer without a cast 

謝謝。

+0

什麼是foo和MSG 2的類型? – 2010-05-31 16:36:24

+0

foo和msg2是如何聲明的? – 2010-05-31 16:36:37

+0

如何顯示foo和msg2的聲明? (哇 - 3秒30秒:)) – Arkadiy 2010-05-31 16:36:53

回答

2
int k; 
    for (k = 0; foo[k] != '\0'; k++) 
     msg2[k] = '\0'; 

將整數指定給整數變量而不是指針。 NULL是一個指針。它通常定義爲:

((void *) 0) 
+2

...並將foo [k]與0 – James 2010-05-31 16:37:24

+0

@自動化是的,我只是在編輯它。謝謝。 – WhirlWind 2010-05-31 16:40:05

+1

'msg2 [k] ='\ 0';'通常比'msg2 [k] = 0;'更受歡迎,儘管兩者都是正確的。 – 2010-05-31 16:51:27

1

警告是正確的,您使用NULL是錯誤的。

NULL指的是指針,而不是string nul-terminator。

在代碼中使用零而不是NULL,在兩個位置。 如果你想要一個特殊的零,你可以使用'\ 0',但那是多餘的。

1
*foo = 0; 

「抹掉」一個C風格的字符串,所有你需要做的就是設置第一個字節爲0

+0

如果你想用0填充內存塊,使用memset – Arkadiy 2010-05-31 16:44:22

+2

我相信使用''\ 0''而不是'0'使得它更明顯的是我們正在處理一個char值。 – ereOn 2010-05-31 16:45:59