1

我一直在尝试编写一个 C 程序来生成字符串的所有可能排列(例如下面代码中的 123)。我成功了,但它在每次可能的排列后都会产生一些垃圾值。请帮我找出可能的原因。它与初始化有关吗?代码:

#include <stdio.h>
void permute(char number[],char out[],int level,int used[]);
int main()
{   
    char number[] = "123";
    char out[3] = "asd";    // Random initialization
    int used[] = {0,0,0};    // To check if number has been used in the string output
    permute(number,out,0,used);
}   
void permute (char number[],char out[],int level,int used[])
{
    if (level == 3)
    {
        printf("%s\n",out);
        return;
    }
    int i;
    for(i = 0; i < 3;i++ )
    {
            if( used[i] == 1) continue;
            out[level] = number[i];
            used[i] = 1;
            permute( number, out, level + 1,used );
            used[i] = 0;
    }       
}
4

3 回答 3

2

我的 C 非常生锈,但我的猜测是它是由于您的字符数组不是以空结尾的事实引起的。

一种选择是单独打印出每个字符:

if (level == 3)
{
    int p;
    for(p=0 ; p<3 ; p++) {
        printf("%c", out[p]);
    }
}
于 2009-03-25T01:36:31.920 回答
2

字符输出[3] = "asd"; // 随机初始化

将其更改为 out[4] 以便为终止 \0 字符留出空间,并且它应该可以按预期工作。

于 2009-03-25T02:58:21.380 回答
0

如果你认为它应该停止打印out前三个字符之后的内容,问问你自己它是如何知道这样做的。

于 2009-03-25T01:38:37.297 回答