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

char out[3] = "asd"; // ランダム初期化

これを out[4] に変更して、終端の \0 文字のためのスペースを確保し、期待どおりに動作するようにします。

于 2009-03-25T02:58:21.380 に答える
2

私のCは非常にさびていますが、文字配列がnullで終了していないことが原因であると推測しています。

1 つのオプションは、各文字を個別に出力することです。

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