mac_05185 2022-07-07 11:40 采纳率: 67.1%
浏览 337
已结题

vs2022编译运行后报乱码如何解决?

这段C代码编译运行后为什么会有乱码出现?

img

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

typedef struct
{
    uint8_t datetime[6];
    uint32_t len;
    uint8_t* data;
}DATA_T;

DATA_T data11;

void supp_data_save()
{
    size_t Return;
    int i;
    uint8_t data1[64] = { 0 };
    uint8_t* buf;

    memset(&data11, 0, sizeof(data11));

    buf = (uint8_t*)malloc(10);
    memcpy(data11.datetime, "202207\0", 6);
    data11.len = 1;
    memcpy(buf, "1233211231\0", 10);
    data11.data = buf;
    printf("data11: %c\r\n", data11.data[0]);
    printf("data11: %c\r\n", data11.data[1]);
    printf("data11: %c\r\n", data11.data[2]);
    printf("==============================\n");

    for (i = 0; i < 10; i++)
    {
        printf("%c", data11.data[i]);
    }
    printf("\r\n00\r\n");
    printf("==============================\n");
    int len1 = (sizeof(data11) + 10 - 1);
    memcpy(data1, &data11, len1);
    for (i = 0; i < 10; i++)
    {
        printf("%c", data1[i]);
    }
    printf("\r\n");
    printf("==============================\n");
    printf("data111: %c\r\n", data11.data[10]);
    printf("data111: %c\r\n", data11.data[11]);
    printf("data111: %c\r\n", data11.data[12]);
    printf("\r\n000\r\n");
}

int main()
{
    supp_data_save();
    return 0;
}
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-07-07 12:35
    关注

    buf = (uint8_t*)malloc(10); //10字节的空间
    memcpy(data11.datetime, "202207\0", 6);//datetime[] 这里7个字节,不是6个字节
    字符数组越界操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月7日
  • 已采纳回答 7月7日
  • 创建了问题 7月7日