AllenSun-1990 2018-04-11 23:21 采纳率: 100%
浏览 764
已采纳

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有问题?麻烦大家帮忙看看啊。

  • 写回答

5条回答 默认 最新

  • vip1031313955 2018-04-11 23:59
    关注

    char *str = "naitdocexv"

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?