C语言排序求帮忙查bug

#include

static char *str = "naitdocexv";

void StringSortIn(char p, int len)
{
int i = 0;
int j = 0;
char val = 0;
while(i < len)
{
for(j = i + 1; j < len; j ++)
{
if(
(p + i) > *(p + j))
{
val = *(p + i);
*(p + i) = *(p + j);
*(p + j) = val;
}
}
i ++;
}
}

void StringSortDe(char p, int len)
{
int i = 0;
int j = 0;
char val = 0;
while(i < len)
{
for(j = i + 1; j < len; j ++)
{
if(
(p + i) < *(p + j))
{
val = *(p + i);
*(p + i) = *(p + j);
*(p + j) = val;
}
}
i ++;
}
}

void StringSortFunc(int a, int s, int e)
{
if(a == 0){
StringSortDe(str + a - 1, e - s);
}

if(a == 1){
    StringSortIn(str + a - 1, e - s);
}

}

int main()
{
StringSortFunc(1, 1, 3);
puts(str);
StringSortFunc(0, 9, 10);
puts(str);
StringSortFunc(1, 7, 9);
puts(str);

return 0;

}
我要对字符串进行局部排序,现在有问题。
首先,char *str = "naitdocexv";这样写为什么会出现访问权限冲突?

然后,这样改char str[] = "naitdocexv"。发现程序可以运行,确只运行一次就跳出了。结果是错的。
我觉得没啥问题啊。是不是VS2015有问题?麻烦大家帮忙看看啊。

char *str = "naitdocexv"

这个错误最直接的错误是你把字面值const的指针幅值给了非const指针,当然还有那个字符串是个临时的,赋值完内存空间就会释放, 不能保证字符串"naitdocexv" 不会被新的申请在这块内存上的值覆盖。

char a[] = "naitdocexv" 之所以可以是因为a[]是一个数组,它其实是把后面的字符串copy到数组里,而不是讲字符串的首地址给a

strsortfunc的参数传错了

void StringSortIn(char p, int len) %若要实现你的想法,则应当将 p 设为字符型指针变量,及改为 void StringSortIn(char * p, int len);
{
int i = 0;
int j = 0;
char val = 0;
while(i < len)
{
for(j = i + 1; j < len; j ++)
{
if((p + i) > (p + j)) %此处显然(p+i) 与 *(p+j) 不是同一种类型,应该为 if((p + i) > *(p + j))
{
val = *(p + i);
*(p + i) = *(p + j);
*(p + j) = val;
}
}
i ++;
}

%%% 抱歉,刚才的版面整理错误。以下是重新整理的。

                void StringSortIn(char p, int len)  %将p 改为指针型参数;即为 char* p

{
int i = 0;
int j = 0;
char val = 0;
while(i < len)
{
for(j = i + 1; j < len; j ++)
{
if((p + i) > (p + j)) % p+i 与(p+j) 不是同种类型,应该为 *(p+i)
{
val = *(p + i);
*(p + i) = *(p + j);
*(p + j) = val;
}
}
i ++;
}
}

%%% 函数 void StringSortDe(char p, int len) 的错误类似。

{
int i = 0;
int j = 0;
char val = 0;
while(i < len)
{
for(j = i + 1; j < len; j ++)
{
if((p + i) > (p + j)) % p+i 与(p+j) 不是同种类型,应该为 *(p+i)
{
val = *(p + i);
*(p + i) = *(p + j);
*(p + j) = val;
}
}
i ++;
}
}

%%% 函数 void StringSortDe(char p, int len) 的错误类似。