首页新闻找找看学习计划

为什么我写的字符串反转函数,输出会出现一部分乱码?

0
悬赏园豆:5 [已解决问题] 解决于 2016-08-05 21:28
复制代码
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include <ctype.h> 

int inverse(char *str1, char *str2)     //字符串反转函数
{
    int length = strlen(str1);
    char *tmp = str1;
    char *p1 = tmp;
    char *p2 = tmp + length - 1;

    while (p1 < p2)
    {
        char c = *p1;
        *p1 = *p2;
        *p2 = c;
        ++p1;
        --p2;
    }
    *str2 = tmp;
    return 0;
}



void main()
{
    char buf[] = "abcdefg";
    char buf2[] = { 0 };
    inverse(buf, buf2);

    printf("buf2:%s \n", buf2);

    printf("hello...\n");
    system("pause");
    return;

}
复制代码

walanwalan的主页 walanwalan | 初学一级 | 园豆:175
提问于:2016-08-05 17:52
< >
分享
最佳答案
0

主要的逻辑是对的,如下的是能出来的,str2指向的地址和str1是同一个缓冲

int inverse(char *str1, char **str2) //字符串反转函数
{
int length = strlen(str1);
char *p1 = str1;
char *p2 = str1 + length - 1;

while (p1 < p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;

++p1;
--p2;
}
*str2 = str1;
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
char buf[] = "abcdefg";
char *buf2;
inverse(buf, &buf2);
printf("buf:%s \n", buf);
printf("buf2:%s \n", buf2);

收获园豆:5
2012 | 专家六级 |园豆:19088 | 2016-08-05 19:33
其他回答(1)
0

因为你的字符串不是unico编码的.应该utf-8的.一个汉字占的字节和英文不一样.

比较简单的法子是先转为unico这样就都是2字节了.

归根倒地要根据当前字符串的编码格式区分一个字符占几个字节.然后整个字符移动.你这样是字节移动就破坏了字符

吴瑞祥 | 园豆:28770 (高人七级) | 2016-08-05 18:38
int inverse(char *str1)
{
    int length ;
    char *p1 ;
    char *p2 ;

    if (str1 == NULL)
    {
        return -1;
    }

     length = strlen(str1);
     p1 = str1;
     p2 = str1 + length - 1;
    while (p1 < p2)
    {
        char c = *p1;
        *p1 = *p2;
        *p2 = c;
        ++p1;
        --p2;
    }
    return 0;
}

这样写就没有问题。。

主要是下面这句出问题

*str2 = tmp;

我不知道为什么?

 

支持(0) 反对(0) walanwalan | 园豆:175 (初学一级) | 2016-08-05 19:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册