关于unicode,宽字符的问题

来源:互联网 发布:choice数据excel插件 编辑:程序博客网 时间:2024/06/06 08:25

引发此问题的原因在于,我是用了一个函数

//========================================
// 功能:将固定格式的时间转化为 time_t 日历时间
//        eg. 1970-01-01 00:00:00  = 0
//========================================
time_t GetTime_t(const char* Buf)
{
    int iYear=0,iMonth=0,iDay=0,
        iHour=0,iMinute=0,iSecond=0;


    //获得年,月,日
    char *pTmp,szBuf[21]="";
    _tcscpy(szBuf,Buf);
    pTmp=_tcsstr(szBuf,"-");
    char szYear[5]="",szMonth[3]="",szDay[3]="";
    char* p=szBuf,*p1=szYear;
    while (p != pTmp)
    {    *p1=*p;p++;p1++;
    }


    *pTmp=',';
    pTmp=_tcsstr(szBuf,"-");
    p1=szMonth;p++;
    while (p != pTmp){
        *p1=*p;p++;p1++;
    }


    *pTmp=',';
    pTmp=_tcsstr(szBuf," ");
    p1=szDay;p++;
    while (p != pTmp){
        *p1=*p;p++;p1++;
    }


    //获得时间
    char szHour[3]="",szMinute[3]="",szSecond[3]="";
    *pTmp=',';
    pTmp=_tcsstr(szBuf,":");
    p1=szHour;p++;
    while (p != pTmp){
        *p1=*p;p++;p1++;
    }
    
        *pTmp=',';
    pTmp=_tcsstr(szBuf,":");
    p1=szMinute;p++;
    while (p != pTmp){
        *p1=*p;p++;p1++;
    }
        *pTmp=',';
    pTmp=_tcsstr(szBuf,":");
    p1=szSecond;p++;
    while (p != pTmp && *p != '\0'){
        *p1=*p;p++;p1++;
    }


    iYear=atoi(szYear);iMonth=atoi(szMonth),iDay=atoi(szDay);
    iHour=atoi(szHour),iMinute=atoi(szMinute),iSecond=atoi(szSecond);


    struct tm t;
    time_t t_of_day;
    t.tm_year=iYear-1900;
    t.tm_mon=iMonth-1;
    t.tm_mday=iDay;
    t.tm_hour=iHour;
    t.tm_min=iMinute;
    t.tm_sec=iSecond;
    t.tm_isdst=0;
    t_of_day=mktime(&t);
//    printf(ctime(&t_of_day));


    
    return t_of_day;
}
error C2664: “wcscpy”: 不能将参数 1 从“char [21]”转换为“wchar_t *”

网上查了一下,大概说是和unicode,宽字符有关。
我有两个工程,其中一个工程运行以上程序没问题,另一个不行。再作比较。
在项目属性中把字符集编码改成多字节即可消除以上问题。但是另外一个项目只能用unicode编码,就算我改成多字节也会引发别的错误。
于是我只好改函数。
将所有_tcsstr改成strstr,问题解决。



原创粉丝点击