gpt4 book ai didi

c - 初始化中的指针目标的符号不同

转载 作者:行者123 更新时间:2023-11-30 16:23:03 25 4
gpt4 key购买 nike

这是我的代码,我在初始化中收到警告指针目标符号不同。有人可以帮我吗

 const uint8_t *activity_output[4] = {"B_STILL", "B_WALk", "B_RUN", "B_UNKNOWN"};

最佳答案

一个string literal (例如“a string”)具有char[N]类型。在您的机器上,charsigned char。这意味着 "B_STILL" 实际上是一个 (signed char[]){"B_STILL"},一个 signed char 字节数组。

uint8_t(通常)是unsigned char的类型定义,并且是无符号类型。

因此,当您从 "B_STILL" 字符串初始化 uint8_t * 指针时,您会自动转换 char* 指针(C 中的数组)衰减为类型指针,即 char[N] 衰减为 char* 指针)到 uint8_t * 指针。因此,编译器警告您 - 您将 signed char* 指针转换为 unsigned char* 指针,它们仅在符号性上有所不同。

可能的修复:

  1. 移动到字符。由于 activity_output 是一个字符串数组(即 char[]),因此人们会期望它具有 char*[] 类型,即。指向字符串的指针数组。那么你的意图就很清楚了。如果您稍后将其与 printf("%s". ...) 一起使用,那就是正确的方法。

    const char *activity_output[4] = {
    "B_STILL",
    "B_WALk",
    "B_RUN",
    "B_UNKNOWN"
    };
  2. 显式转换指针。

    const uint8_t *activity_output[4] = {
    (uint8_t*)"B_STILL",
    (uint8_t*)"B_WALk",
    (uint8_t*)"B_RUN",
    (uint8_t*)"B_UNKNOWN"
    };
  3. 使用compound literals .

    const uint8_t *activity_output[4] = {
    (uint8_t[]){"B_STILL"},
    (uint8_t[]){"B_WALk"},
    (uint8_t[]){"B_RUN"},
    (uint8_t[]){"B_UNKNOWN"}
    };

关于c - 初始化中的指针目标的符号不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com