首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告:初始化“uint8_t *‘”{aka’无符号字符*'}的“无符号字符”将整数从指针中生成,而不进行强制转换[-Wint-转换]

警告:初始化“uint8_t *‘”{aka’无符号字符*'}的“无符号字符”将整数从指针中生成,而不进行强制转换[-Wint-转换]
EN

Stack Overflow用户
提问于 2022-07-31 20:53:15
回答 3查看 637关注 0票数 0

实际上没有错误。代码工作正常,但是这个警告让我很烦。

代码语言:javascript
运行
复制
lib/uwc_event/wifi_event.c: In function 'uwc_wifi_init_sta':
lib/uwc_event/wifi_event.c:33:24: warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]
               .ssid = {(uint8_t *)&WIFI_SSID[0]},
                        ^
lib/uwc_event/wifi_event.c:33:24: note: (near initialization for 'wifi_config.sta.ssid[0]')
lib/uwc_event/wifi_event.c:34:28: warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]
               .password = {(uint8_t *)&WIFI_PASW[0]},
                            ^
lib/uwc_event/wifi_event.c:34:28: note: (near initialization for 'wifi_config.sta.password[0]')

这是警告显示的部分代码:

代码语言:javascript
运行
复制
wifi_config_t wifi_config = {
      .sta =
          {
              .ssid = {(uint8_t *)&WIFI_SSID[0]},
              .password = {(uint8_t *)&WIFI_PASW[0]},
              .threshold.authmode = WIFI_AUTH,
          },
  };

其中声明了.ssid (我不确定,请参见:(https://github.com/espressif/esp-idf/blob/master/components/esp_wifi/include/esp_wifi_types.h)):

代码语言:javascript
运行
复制
typedef struct {
    uint8_t ssid[32];
    uint8_t password[64];

// another code...

WIFI_SSIDWIFI_PASW是由我自己声明的:

代码语言:javascript
运行
复制
extern char WIFI_SSID[32];
extern char WIFI_PASW[32];

那么我该如何删除这些警告呢?是什么让这种警告发生的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-31 21:10:31

ssidpassword是数组,因此您正在尝试将(rhs)地址初始化为数组的第一个元素。相反,您希望使用例如strcpy()复制数据。

代码语言:javascript
运行
复制
strcpy(wifi_config.sta.ssid, WIFI_SSID);
strcpy(wifi_config.sta.password, WIFI_PASW);
票数 2
EN

Stack Overflow用户

发布于 2022-07-31 21:07:15

数据成员ssid被声明为uint8_t类型对象的数组。

代码语言:javascript
运行
复制
uint8_t ssid[32];

您正在尝试用指针初始化它的第一个元素。

代码语言:javascript
运行
复制
.ssid = {(uint8_t *)&WIFI_SSID[0]},

上面的初始化相当于

代码语言:javascript
运行
复制
.ssid = {[0] = (uint8_t *)&WIFI_SSID[0]},

也就是说,元素ssid[0]是用指针初始化的。

所以编译器发出一条诊断消息。

数据成员password也存在同样的问题。

若要设置这些数据成员的值,如果这些数组包含字符串,则需要使用任一strcpy

代码语言:javascript
运行
复制
extern char WIFI_SSID[32];
extern char WIFI_PASW[32];

如果数组不包含字符串,则为memcpy

票数 2
EN

Stack Overflow用户

发布于 2022-07-31 21:14:15

谢谢你的“奥兰风”和“莫斯科的弗拉迪”,我的最后代码是:

代码语言:javascript
运行
复制
wifi_config_t wifi_config = {
      .sta =
          {
              .threshold.authmode = WIFI_AUTH,
          },
  };

strncpy((char *)wifi_config.sta.ssid, (char *)&WIFI_SSID[0], 32);
strncpy((char *)wifi_config.sta.password, (char *)&WIFI_PASW[0], 64);

在这里,编译器将在没有警告的情况下得到结果:

代码语言:javascript
运行
复制
 *  Executing task: C:\Users\User\.platformio\penv\Scripts\platformio.exe run 

Processing esp32cam (platform: espressif32; board: esp32cam; framework: espidf)
------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32cam.html
PLATFORM: Espressif 32 (5.0.0+sha.e66e12c) > AI Thinker ESP32-CAM
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)      
PACKAGES:
 - framework-espidf @ 3.40401.0 (4.4.1)
 - tool-cmake @ 3.16.4
 - tool-esptoolpy @ 1.30300.0 (3.3.0)
 - tool-idf @ 1.0.1
 - tool-mconf @ 1.4060000.20190628 (406.0.0)
 - tool-ninja @ 1.9.0
 - toolchain-esp32ulp @ 1.22851.191205 (2.28.51)
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3
Reading CMake configuration...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 7 compatible libraries
Scanning dependencies...
Dependency Graph
|-- esp32-camera @ 2.0.0
|-- uwc_event
|   |-- uwc_cam_cfg
|   |   |-- esp32-camera @ 2.0.0
|   |-- uwc_eol_remover
|   |-- uwc_tag
|   |-- uwc_uart
|   |-- uwc_wifi_cfg
|   |   |-- uwc_tag
Building in release mode
Compiling .pio\build\esp32cam\liba67\uwc_event\wifi_event.o
Archiving .pio\build\esp32cam\liba67\libuwc_event.a
Linking .pio\build\esp32cam\firmware.elf
Retrieving maximum program size .pio\build\esp32cam\firmware.elf
Checking size .pio\build\esp32cam\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]  10.1% (used 33120 bytes from 327680 bytes)
Flash: [=======   ]  72.0% (used 755277 bytes from 1048576 bytes) 
Building .pio\build\esp32cam\firmware.bin
esptool.py v3.3
Creating esp32 image...
Merged 25 ELF sections
Successfully created esp32 image.
================== [SUCCESS] Took 21.36 seconds ==================
 *  Terminal will be reused by tasks, press any key to close it.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73186826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档