c - sizeof 的返回值

标签 c linux sizeof

我有这个 XDR 结构:

struct Response {
    bool_t error;
    float result;
};
typedef struct Response Response;

主要是:

Response y;
y.result = 5.7; 
y.error = 0; 
fprintf(f,"y.error's size: %d bit\n",sizeof(y.error));

我在我的txt文件中获取:

y.error's size: 0 bit

更多:

我已经使用 rpcgen 创建了一个 XDR 结构(结构响应)。我将此结构发送给带有套接字的客户端:

XDR xdrs_w;
Response y; 

FILE *stream_socket_w = fdopen(s, "w"); /* s is socket's file descriptor */
xdrstdio_create(&xdrs_w, stream_socket_w, XDR_ENCODE);

y.result = 6.8; 
y.error = 0; /* false */

if(!xdr_Response(&xdrs_w, &y)){
  printf("Error");
}

fflush(stream_socket_w);

问题出在 xdr_Response 函数上。所以我认为错误在 y.error = 0

最佳答案

#include <stdio.h>

typedef unsigned char bool_t;

struct Response {
  bool_t error;
  float result;
};
typedef struct Response Response;

int main(int argc, char *argv[]) {
  Response r;

  r.result = 5.7;
  r.error = 0;

  printf("y.error's size: %zu bytes\n", sizeof(r.error));

  return 0;
}

按预期为我工作。 bool_t 不是标准类型,所以我对它进行了类型定义。还要记住,在 64 位平台上,sizeof() 返回无符号长整型,因此您需要在 fprintf 函数中使用 %ld。

关于c - sizeof 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513580/

相关文章:

c - 无休止的 while 循环和 fscanf 不将数据分配给结构

python - 如何返回指向ctypes中结构的指针?

c++ - 无法更改 CMake 中的默认链接器

linux - ssh 隧道中的用户名@主机

C段错误

c - 在 C 中初始化大小的静态字符串列表

c - 以相同的优先级移位/归约

c++ - C++ ubuntu 中的文件访问

c - C 中结构数组的 'sizeof' 结果?

c - sizeof 运算符的行为?