回 帖 发 新 帖 刷新版面

主题:求指导

    void utf_8(char *str)
{
    int i = 0;
    while(str[i]!='\0')
    {
        if( (str[i]&0xc0)==0x00)
        {
            i+=1;
        }
        if( (str[i]&0xe0)==0xc0)
        {
            i+=2;
        }
        if( (str[i]&0xf0)==0xe0)
        {
            i+=3;
        }
        if( (str[i]&0xf8)==0xf0)
        {
            i+=4;
        }
        if( (str[i]&0xfc)==0xf8)
        {
            i+=5;
        }
        if( (str[i]&0xfe)==0xfc)
        {
            i+=6;
        }
    }
    int j = i;
    i = 0;
    char *tmp =  (char*)malloc(j+1);
    memset(tmp,j+1,0);
    tmp[j]='\0';
    while(str[i]!='\0')
    {
        if( (str[i]&0xc0)==0x00)
        {
            tmp[j-1] = str[i];
            j-=1;
            i+=1;
        }
        if( (str[i]&0xe0)==0xc0)
        {
            tmp[j-1] = str[i];
            j-=2;
            i+=2;
        }
        if( (str[i]&0xf0)==0xe0)
        {
            tmp[j-1] = str[i];
            j-=3;
            i+=3;
        }
        if( (str[i]&0xf8)==0xf0)
        {
            tmp[j-1] = str[i];
            j-=4;
            i+=4;
        }
        if( (str[i]&0xfc)==0xf8)
        {
            tmp[j-1] = str[i];
            j-=5;
            i+=5;
        }
        if( (str[i]&0xfe)==0xfc)
        {
            tmp[j-1] = str[i];
            j-=6;
            i+=6;
        }
    }

    *str = *tmp; // tmp=321,而str=323;
    free tmp;

}
为什么 在我输入123的时候  已经反过来了,可在赋值的时候 str=323

回复列表 (共7个回复)

沙发

因为字符串不可以这样赋值。
你用*str=*tmp仅仅相当于:str[0]=tmp[0]而已。

板凳


那我要用个循环来给他赋值?

3 楼

是的,要用循环

4 楼

可以用strncpy

5 楼


对哦~我怎么没想到呀~(*^__^*) 嘻嘻……!!谢谢啦

6 楼


还有个问题,就是为什么这个代码只有在输入数字时有用,在我输入的是字符串的时候就判断失败呀![em18]

7 楼

唉,没仔细看,你这个是用char*来处理utf8字串啊,这样就不能用strncpy了,用memmove或是memcpy吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册