2012-11-23 115 views
-1

以下代碼鑄造u_int32到char

u_int32 *data_out 
data_out = malloc(4 * sizeof(uint32_t)); 
//connection_fd is a socket 
n = write(connection_fd, data_out[0], strlen(data_out[0])); 

產生以下錯誤:

Array.c:261:警告:傳遞的 'strlen的' 參數1時將整數指針,未作鑄造 /usr/include目錄/ string.h中:399:注:應爲 '爲const char *',但參數類型是 'uint32_t的' 的

我嘗試以下爲好,但仍然是一個警告的結果:

n = write(connection_fd, (char) data_out[0], strlen((char) data_out[0])); 
n = write(connection_fd, (char*) data_out[0], strlen((char*) data_out[0])); 

感謝您的任何見解:), 帕特里克

+2

百萬美元的問題:*你想要做什麼?* – Jon

+3

爲什麼你使用'strlen()'的東西肯定不是一個字符串? – Crozin

回答

2

爲什麼你正在使用的strlen寫的詮釋?
也許使用:

n = write(connection_fd, &(data_out[0]), sizeof(uint32_t)); 
+0

最好是'data_out',而不是'data_out [0]',因爲這是由'write'調用的地址拉取的。 – WhozCraig

+0

你是對的,但我想他想指向第一個數組元素,所以也許更好'$(data_out [0])'明確表示我的意思是第一個元素 –

+0

我優先於'(data + n)'for指針算術,但每個人都有自己的偏好。這有效,似乎解決了OP的問題。 GJ。 – WhozCraig

1

我按照你的警告消息

第一種情況:strlen()期待一個const char *

第二種情況:轉換爲char只是不會工作,即使你char*你會得到警告,因爲,strlen()適用於\0 null結束字符串給出字符串的長度,但data_out[i]int這樣的問題

這裏要傳遞int爲指針char這就是爲什麼警告:

passing argument 1 of 'strlen' makes pointer from integer without a cast 

正如我所看到的一切是在消息中明確的,你爲什麼不理解。

Array.c:261: warning: passing argument 1 of 'strlen' makes pointer  
from integer without a cast /usr/include/string.h:399: note: expected 
'const char *' but argument is of type 'uint32_t' 

對於write()也存在問題。

(char*)data_out(char*)&data_out[0]與第二個參數相反,而不是您所做的。

+0

@帕特里克:希望你明白了.. – Omkant

+0

非常好,那就像一個治療:) – Patrick

0

看起來編譯器已經告訴過你代碼出了什麼問題。

strlen' makes pointer from integer without a cast

意思是:你試圖在沒有強制轉換的情況下將一個整數顯示到指針變量中。

expected 'const char *' but argument is of type 'uint32_t'

方式:函數想一個const char 指針但你給它一個uint32_t的變量實例