c - 从 : warning: conversion to ‘size_t’ from ‘ssize_t’ may change the sign of the result 接收

标签 c

如何修复 gcc (Debian 4.9.2-10) 4.9.2 编译器警告

warning: conversion to ‘size_t’ from ‘ssize_t’ may change the sign of the result [-Wsign-conversion] recv_len = recvfrom(my_socket, *buf, MESSAGE_MAX_LEN, 0, (struct sockaddr *)&remote_addr, &addr_len);

代码:

int my_socket;
struct sockaddr_storage remote_addr;
socklen_t addr_len = sizeof(remote_addr);

void
socket_listen(
        int (*callback )(),
        char ** buf)
{
  size_t recv_len;
  ...
  *buf = malloc(MESSAGE_MAX_LEN);
  recv_len = recvfrom(my_socket, *buf, MESSAGE_MAX_LEN, 0, (struct sockaddr *)&remote_addr, &addr_len);
  ...
}

最佳答案

显而易见的解决方法:当然是使用正确的类型:

const ssize_t recv_len = recvfrom(...);

它已签名,因为它需要能够返回负值 (-1) 以指示错误,请参阅 the manual page :

These calls return the number of bytes received, or -1 if an error occurred. The return value will be 0 when the peer has performed an orderly shutdown.

关于c - 从 : warning: conversion to ‘size_t’ from ‘ssize_t’ may change the sign of the result 接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410454/

相关文章:

c - fopen 和 freopen 有什么区别?

c - 将字符输入到 C 程序中的问题

php - 可以在 php 中用位域封装一个 c 结构吗?

将枚举错误代码转换为字符串

c - 十六进制 int 变量 C 中的前导零

c - 在 C 中处理数组嵌套结构的最佳方法

php - 如何利用php的漏洞?

c++ - 垃圾收集的想法

c - 在一个函数中分配内存并在另一个函数中使用它

c - gcc 完整性检查包