不可忽略的小问题

博客主要讲述了结构体中字符数组越界的问题。定义结构体时字符数组长度不足,使用strcpy复制数据会导致越界。正确做法是给字符数组扩大一个字节,并使用memset初始化,用strncpy复制数据,避免越界问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typedef struct tagStruct
{
    char wchar[4];
    char wchar2[5];
}TSTRUCT;

    TSTRUCT tstruct;
    strcpy(tstruct.wchar,"aaaaaaaa");
    strcpy(tstruct.wchar2,"bbbbbbbbbb");
    AnsiString str1 = tstruct.wchar;           //str1=aaaabbbbbbbbbb
    AnsiString str2 = tstruct.wchar2;         //str2=bbbbbbbbbb

wchar不是我想要的那个,What I want is “aaaa”;

wchar越界了,What I want is “bbbbb”;

正确的用法是给wchar和wchar2都扩大一个字节

typedef struct tagStruct
{
    char wchar[5];           //比要求的大了一个字节
    char wchar2[6];         //比要求的大了一个字节
}TSTRUCT;


    TSTRUCT tstruct;
    memset(&tstruct,0,sizeof(tstruct));        //一定要memset一下,否则也是错的
    strncpy(tstruct.wchar,"aaaaaaaaa",sizeof(tstruct.wchar)-1);
    strncpy(tstruct.wchar2,"bbbbbbbbb",sizeof(tstruct.wchar2)-1);
    AnsiString str1 = tstruct.wchar;             //str1 = “aaaa“
    AnsiString str2 = tstruct.wchar2;           //str2 = “bbbbb”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值