strlen参数不匹配编译报错处理

这个编译错误是由于 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 释放了内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值