繁体   English   中英

recv()C错误,从char到int的无效转换

[英]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");
  1. recv返回一个ssize_t ,通常比char大得多。 因此,您不能安全地将返回代码存储在pholder
  2. recv()的参数顺序错误。 这是声明: ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM