Xcode c printf()中输出中的反转问号

时间:2014-09-01 21:53:58

标签: c

我正在尝试运行以下代码来查找字符串的排列:

void swapchar(char *a,char *b)
{
    char tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
}

void permute (char *a,int i,int n)
{
    if (i==n)
    {
        for (int k=0;k<(sizeof(a)/sizeof(a[0]));k++)
        {
            printf("\t%c",a[k]);
        }
        printf("\n");
    }
    else
    {
        for (int j=i;j<n;j++)
        {
            swapchar((a+i),(a+j));
            permute(a, i+1, n);
            swapchar((a+i),(a+j));
        }
    }
}

我得到的输出类似于:

K   N   L   U   A    <inverted ?> <inverted ?> <inverted ?>       
K   A   N   U   L    <inverted ?> <inverted ?> <inverted ?>
K   A   N   L   U    <inverted ?> <inverted ?> <inverted ?>   
K   A   U   N   L    <inverted ?> <inverted ?> <inverted ?>
K   A   U   L   N    <inverted ?> <inverted ?> <inverted ?>
K   A   L   U   N    <inverted ?> <inverted ?> <inverted ?>

你可以向我解释一下,我的代码在哪里向南走,我最后会收到这些垃圾字符?

1 个答案:

答案 0 :(得分:2)

在代码中使用sizeof(a)/sizeof(a[0])并不能达到您的预期,因为传递给函数的数组“衰减”到指针。尝试将数组的大小显式地作为参数之一传递。