这个编译错误是由于 strlen
函数期望的参数类型是 const char *
,而你传递给它的是 const uint8_t *
类型,也就是 const unsigned char *
类型,两种指针所指向的数据类型的有符号性不同,从而引发了错误。
要解决这个问题,你需要将 uint8_t *
类型的指针强制转换为 const char *
类型,这样就能符合 strlen
函数的参数要求了。
以下是修改后的代码示例:
#include <stdint.h>
#include <string.h>
// 假设 E_wifiAuthMode_t 和 E_WifiMode 已经定义
typedef enum {
// 这里可以添加具体的枚举值
} E_wifiAuthMode_t;
typedef enum {
// 这里可以添加具体的枚举值
} E_WifiMode;
typedef struct
{
uint8_t ssid[32];
uint8_t pass_word[64];
E_wifiAuthMode_t authMode;
uint8_t channel;
uint8_t maxConnection;//
}WifiAP_Config_t;
typedef struct
{
uint8_t ssid[32];
uint8_t pass_word[64];
E_wifiAuthMode_t authMode;
}WifiStation_Config_t;
typedef struct
{
E_WifiMode mode;
WifiStation_Config_t wifiSTA_conf;
WifiAP_Config_t wifiAP_conf;
}WifiConfig_t;
// 假设 wifi_config 结构体已经定义
typedef struct {
struct {
size_t ssid_len;
} ap;
} wifi_config_t;
int main() {
WifiConfig_t *wifiConf = (WifiConfig_t *)malloc(sizeof(WifiConfig_t));
wifi_config_t wifi_config;
// 将 uint8_t * 类型的指针强制转换为 const char * 类型
wifi_config.ap.ssid_len = strlen((const char *)wifiConf->wifiAP_conf.pass_word);
free(wifiConf);
return 0;
}
代码解释
(const char *)wifiConf->wifiAP_conf.pass_word
:将wifiConf->wifiAP_conf.pass_word
这个uint8_t *
类型的指针强制转换为const char *
类型,这样就可以作为参数传递给strlen
函数了。
注意事项
- 要确保
wifiConf->wifiAP_conf.pass_word
数组中的字符串是以空字符'\0'
结尾的,否则strlen
函数可能会越界访问,导致未定义行为。 - 在实际使用中,要根据具体情况处理内存分配和释放,避免内存泄漏。上述示例中使用了
malloc
分配内存,最后使用free
释放了内存。