我有这个 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/