求解答:使用指针进行字符串内排序 输出出现一串烫

任务目标
采用指针变量作为形参,编写一个实现两字符交换的函数。在主函数中输入一个字符串,调用字符交换函数将其中的字符按从小到大的顺序排序后输出。

我的解决方案如下


#include <stdio.h>
void main()
{
    char str[80], i, j;
    void swap(char* pa, char* pb);
    gets(str);
    int a;
    for (a = 79; a >= 0; a--)
        if (str[a] != '\0')
        {
            a++;
            break;
        }
    int m,n;
    char* p1=&i, * p2=&j;
    for(m = 0; m < a; m++)
        for (n = 1; n < a - m; n++)
        {
            i = str[n]; j = str[n - 1];
            if (i<j)
            {
                swap(p1, p2);
            }
            str[n] = i; str[n - 1] = j;
        }
    printf("%s\n", str);
}
void swap(char* pa, char* pb) 
{
    char ch;
    ch = *pa;
    *pa = *pb;
    *pb = ch;
}

但是在实际使用时,
输入:
ekfdac
目标输出:
acdefk
但是实际输出了 '(一串子)烫?'
请问问题出在哪里,求解答谢谢!

这样写,供参考:

#include <stdio.h>
void main()
{
    char str[80], i, j;
    void swap(char* pa, char* pb);
    gets(str);
    //************Begin***********
    for (i = 0; str[i + 1]; i++)
        for (j = i + 1; str[j]; j++)
            if (str[i] > str[j])
                swap(&str[i], &str[j]);
    //************End***********
    printf("%s\n", str); //输出排序后的字符串
}
void swap(char* pa, char* pb) //自定义函数实现两字符交换
{
    //************Begin***********
    char tmp;
    tmp = *pa;
    *pa = *pb;
    *pb = tmp;
    //************End***********
}

你这代码问题多了
写代码之前要先会看代码,不要老写自己看不懂的代码
你循环过程中p1p2的地址一直都不变,就两个字符来回交换
整个逻辑都是错的,就别介意有点bug了

原题干:

#include <stdio.h>
void main()
{
    char str[80], i, j;
    void swap(char *pa,char *pb);
    gets(str);
//************Begin***********
    
//************End***********
    printf("%s\n", str); //输出排序后的字符串
}
void swap(char *pa,char *pb) //自定义函数实现两字符交换
{
    //************Begin***********
  
//************End***********
}