我写了个排列组合的程序,编译通过,但就是运行时,段错误。我找了好久找不到错,请大家帮帮忙啊!

haimiange 发布于 2011/10/15 20:11
阅读 167
收藏 0

/*输入ABCD要输出所有可能的组合*/

#include<stdio.h>

#include<math.h>

void fun(int k,char * str)

{

    if(k==strlen(str)){

        printf("%s\n",str);

        return 0;

    }

    for(i=k+1;i<strlen(str);i++){

        fun(k+1,str);

        tmp=str[k];

        str[k]=str[i];

        str[i]=tmp;

        fun(k+1,str);

    }

}

void main()

{

    char *str="ABCD";

    fun(0,str);

}

加载中
0
h
haimiange

总是提示这个部分有问题:str[k]=str[i];

但我还是看不出来,希望大家给指正,谢谢了。

0
xyz555
xyz555

数组越界。

另外i、tmp未声明

inclued<string.h>

0
h
haimiange

引用来自“xyz555”的答案

数组越界。

另外i、tmp未声明

inclued<string.h>

哦,谢谢,不过数组越界是因为k的值设的不对还是循环结束的条件不对啊?这个问题困扰我好久了,不知道怎么改!
0
xyz555
xyz555
你只对i做了检查,k没有,所以k会越界。你可以把相应的数组操作语句去掉,每次调用光打印k值就知道哪里会越界了。
0
h
haimiange

引用来自“xyz555”的答案

你只对i做了检查,k没有,所以k会越界。你可以把相应的数组操作语句去掉,每次调用光打印k值就知道哪里会越界了。
哦,太感谢了,我试试,非常感谢!!!
返回顶部
顶部