我正在做一个client-socket项目,通过Linuxsocket编程将一个定制数据类型(MyMail)从客户端发送到服务器.以下是我的客户代码:

struct mail pmail;
connect(clientSocket, (struct sockaddr*)&sa, sizeof(sa));
send(clientSocket, &pmail, sizeof(pmail), 0);

对于我的服务器,这是有问题的部分:

int new_socket = .....;
char buffer[1024] = { 0 };
valread = read(new_socket, buffer, 1024 - 1);
strut mail pmail;
pmail = &buffer;

问题是,在汇编之后,它说的是operand types are ‘mail’ and ‘char (*)[1024]’.所以,我想知道是否有什么方法可以让我将变量pmail的内容分配给缓冲区?或者我必须try 另一种方式?

推荐答案

buffer赋给struct mail的指针:

int new_socket = .....;
char buffer[1024] = { 0 };
valread = read(new_socket, buffer, 1024 - 1);
if (valread)
    struct mail* pmail = (struct mail*)buffer;

或者干脆:

int new_socket = .....;
struct mail pmail;
valread = read(new_socket, &pmail, sizeof(struct mail));

C++相关问答推荐

为什么在传输 Big Data 时共享内存段的运行时间比管道更长?

在C语言中使用scanf()时我无法理解的警告

如何创建由符号组成的垂直结果图形?

从组播组地址了解收到的数据包长度

在C中将通用字符名称转换为UTF-8

如何跨平台处理UTF-16字符串?

向上强制转换C中的数值类型总是可逆的吗?

CSAPP微型shell 实验室:卡在sigprocmask

GTK3按钮信号错误

在另一个函数中使用realloc和指针指向指针

指向不同类型的指针是否与公共初始序列规则匹配?

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

为什么GCC不能在 struct 初始值设定项中以sizeof作为条件的三进制中处理复合文字的编译时求值?

使用 strtok 多次分割一个字符串会导致意外行为

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

根据输入/输出将 C 编译过程分为预处理、编译、汇编和链接步骤

使用替代日历打印日期

使用复合文字数组初始化的指针数组

设置具有非零终止字符串的大整数

我如何(合规地)从 tmpfile() 读取?