用指针对字符串排序的问题,内存访问非法

 #include<stdio.h>
#include<string.h>

int main()
{
    void swap(char *p1,char *p2,char *p3);
    char a[10],b[10],c[10];
    char *pa=a,*pb=b,*pc=c;
    scanf("%s%s%s",pa,pb,pc);
    swap(pa,pb,pc);
    printf("%s %s %s\n",a,b,c);

}

void swap(char *p1,char *p2,char *p3)
{
    void exchange(char *p1,char *p2);
    exchange(p1,p2);
    exchange(p2,p3);
    exchange(p1,p2);
}

void exchange(char *p1,char *p2)
{
    char * temp=NULL;
    if(strcmp(p1,p2)>0)
    {
        strcpy(temp,p1);
        strcpy(p1,p2);
        strcpy(p2,temp);
    }

}

请问这么做的思路有没有问题

C可以用malloc

 char * temp = (char *)malloc(sizeof(char) * 100);

exchange这个函数中char * temp=NULL这个地方有问题,会报段错误,因为他是一个空指针,此处可以给他分配一个内存空间,或者让其指向一个char类型的数组

char * temp = new char[100];
这样写

另外之前我给你代码的,只要交换指针就可以了。没必要复制来复制去。

别忘了

 #include<stdlib.h>