字符串数组相关的问题

#字符串数组传递问题,我将字符串数组传递到了函数中进行排序,但是传进后进行排序后,结果异常,我的理解是我将第一个字符串"d4"的地址作为首地址传递给了函数中的指针p,当p+1后将会指向下一个字符串“a4”,我不知道是代码的问题还是我理解的问题,希望各位答主指点我下

问题与结果如下

img

img

#include
#include
#include


int exchange(char *p);


int main()
{
    char a[][10]={"dddd","aaaa","cccc","bbbb","eeee","llll","kkkk","oooo","pppp","cccc"};
    int i;
    for(i=0;i<10;i++)
    {
        
        printf("%s\n",a[i]);
        
    }
    printf("\n");    
    exchange(a[0]);
    printf("排序后"); 
    for(i=0;i<10;i++)
    {
        
        printf("%s\n",a[i]);
        
    }
    
    
    
}


int exchange(char *p)
{
    int i,j;
    char b[5]={"ssss"};
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
            if(strcmp(p+j,p+j+1)>=0)
            {
                strcpy(b,p+j+1);
                strcpy(p+j+1,p+j);
                strcpy(p+j,b);
                
            }
            
            
            
            
        }
        
        
    }
    
    
    
    
    
    
 } 

exchange(a)
函数参数改为char (*p)[10]

#include<math.h>
#include<string.h>
#include <stdlib.h>
 
void exchange(char (*p)[10]);
 
 
int main()
{
    char a[][10]={"dddd","aaaa","cccc","bbbb","eeee","llll","kkkk","oooo","pppp","cccc"};
    int i;
    for(i=0;i<10;i++)
    {
        
        printf("%s\n",a[i]);
        
    }
    printf("\n");    
    exchange(a);
    printf("排序后"); 
    for(i=0;i<10;i++)
    {
        
        printf("%s\n",a[i]);
        
    }
    
    system("pause");
    
}
 
 
void exchange(char (*p)[10])
{
    int i,j;
    char b[10]={"ssss"};
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
            if(strcmp(p[j],p[j+1])>0)
            {
                strcpy(b,p[j+1]);
                strcpy(p[j+1],p[j]);
                strcpy(p[j],b);
                
            }
  
        } 
    }

 }