[英]error invalid conversion from int to const char* [fpermissive] in C
[英]recv() C error invalid conversion from char to int
我下面有一些C代码:
char update[MAX_UPDATE_LEN];
int remoteLen;
char pholder;
pholder = recv(update,connectDescriptor,MAX_UPDATE_LEN,MSG_DONTWAIT); //error
remoteLen = atoi("pholder");
我不断收到以下错误:
client.cpp:849: error: invalid conversion from `char*' to `int'
client.cpp:849: error: initializing argument 1 of `ssize_t recv(int, void*,
size_t, int)'
client.cpp:849: error: invalid conversion from `int' to `void*'
client.cpp:849: error: initializing argument 2 of `ssize_t recv(int, void*,
size_t, int)'
是什么导致这些错误?
此代码存在多个问题:
char update[MAX_UPDATE_LEN];
int remoteLen;
char pholder;
pholder = recv(update,connectDescriptor,MAX_UPDATE_LEN,MSG_DONTWAIT); <-- error here
remoteLen = atoi("pholder");
recv
返回一个ssize_t
,通常比char
大得多。 因此,您不能安全地将返回代码存储在pholder
。 recv()
的参数顺序错误。 这是声明: ssize_t recv(int sockfd, void *buf, size_t len, int flags);
atoi
正在传递不是数字"pholder"
的字符串。 它期望像"12345"
这样的字符串。 如果您期望使用ASCII编码的数字,则可以对atoi
update
。 奖励:对于len
使用sizeof(update)
而不是MAX_UPDATE_LEN
这样,如果类型声明或update
大小发生变化,您仍应获得预期的值。
解决方法如下:
char update[MAX_UPDATE_LEN];
const int flags = MSG_DONTWAIT;
const ssize_t ret = recv(connectDescriptor, update , sizeof(update), flags);
if (-1 == ret)
{
perror("recv");
exit(1);
}
const int remoteLen = strtol(update, update + sizeof(update), 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.