-1

以下代码

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]));

感谢您的任何见解:),帕特里克

4

3 回答 3

2

为什么你用strlen写int?
也许使用:

n = write(connection_fd, &(data_out[0]), sizeof(uint32_t));
于 2012-11-23T10:00:53.570 回答
1

我正在关注您的警告信息

第一种情况:strlen()期待一个const char *

第二种情况:转换为char仅不起作用,即使您这样做,char*您也会收到警告,因为,strlen()适用于以\0空结尾的字符串以给出字符串的长度,但问题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]在第二个参数中,而不是你所做的。

于 2012-11-23T10:01:16.057 回答
0

编译器似乎已经告诉您代码有什么问题。

strlen' 从整数生成指针而不进行强制转换

意思是:你试图在没有强制转换的情况下将整数显示到指针变量中。

预期为“const char *”,但参数的类型为“uint32_t”

意思是:函数想要一个 const char指针,但你给了它一个 uint32_t变量实例

于 2012-11-23T10:33:16.773 回答