You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据组赋值给结构体中的指针?代码问题求助

正确将数组赋值给结构体指针成员的实现方法

原代码的核心错误

  • 指针成员payload未指向有效内存就直接拷贝数据:原代码直接把数组内容拷贝到指针变量本身的内存(&message.payload),这会覆盖指针的地址值,而非指针指向的存储区域。
  • 类型不匹配错误:将uint8_t**类型的&message.payload赋值给TestStruc*类型的指针,导致后续非法内存访问。
  • 错误的数组初始化:第二个代码中用字符串文本初始化单个uint8_t变量,既类型不匹配,也无法得到二进制的0x10等值。

正确实现方案

要给指针成员payload赋值数组,需先让指针指向一块足够容纳数组的内存,再用memcpy拷贝数据。以下是两种可行方式:

方式1:静态分配内存(使用栈上数组)

#include <stdio.h>
#include <string.h>
typedef unsigned char uint8_t;

typedef struct
{
    uint8_t id;
    uint8_t commandId;
    uint8_t* payload;
} TestStruc;

int main()
{
    uint8_t Array[4] = {0x10, 0x11, 0x12, 0x13};
    TestStruc message = {0};
    // 静态分配一块能容纳4个uint8_t的内存,让payload指向它
    uint8_t payload_buf[4];
    message.payload = payload_buf;
    
    // 将数组内容拷贝到payload指向的内存
    memcpy(message.payload, Array, sizeof(Array));
    
    // 打印验证结果
    for(int i = 0; i < 4; i++){
        printf("0x%02X ", message.payload[i]);
    }
    printf("\n");

    return 0;
}

方式2:动态分配内存(使用堆内存)

如果需要内存在函数外也能使用,推荐用动态分配:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef unsigned char uint8_t;

typedef struct
{
    uint8_t id;
    uint8_t commandId;
    uint8_t* payload;
} TestStruc;

int main()
{
    uint8_t Array[4] = {0x10, 0x11, 0x12, 0x13};
    TestStruc message = {0};
    // 动态分配内存,大小等于数组长度
    message.payload = (uint8_t*)malloc(sizeof(Array));
    if(message.payload == NULL){
        printf("内存分配失败\n");
        return -1;
    }
    
    // 拷贝数据
    memcpy(message.payload, Array, sizeof(Array));
    
    // 打印验证结果
    for(int i = 0; i < 4; i++){
        printf("0x%02X ", message.payload[i]);
    }
    printf("\n");
    
    // 动态分配的内存记得释放
    free(message.payload);
    message.payload = NULL;

    return 0;
}

关键点说明

  • 必须确保payload指向的内存大小≥要拷贝的数组长度,避免内存越界。
  • 动态分配内存后,使用完毕一定要调用free释放,防止内存泄漏。
  • 打印指针指向的数组时,需要遍历每个元素,直接打印指针本身只会输出地址值。

内容的提问来源于stack exchange,提问作者0983

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:53:11