用指针对字符串排序的问题,内存访问非法
 #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);
    }

}

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

5个回答

C可以用malloc

 char * temp = (char *)malloc(sizeof(char) * 100);
Firas
平菓菓 回复u011475211: 那就传递指针的指针
大约 5 年之前 回复
u011475211
caoxwei2 用数组好像更方便,char temp[20];另外 ,您说的不用复制,直接改变指针,但是由于参数单向传递,子函数里参数指针变化,不是不会影响实参吗?
大约 5 年之前 回复

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

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

u011475211
caoxwei2 我写的是C程序,C里面没有new 这个关键字吧
大约 5 年之前 回复

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

别忘了

 #include<stdlib.h>
u011475211
caoxwei2 我想问一下用stdlib.h作用是什么?
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问