我正在尝试运行以下代码来查找字符串的排列:
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 ?>
你可以向我解释一下,我的代码在哪里向南走,我最后会收到这些垃圾字符?
答案 0 :(得分:2)
在代码中使用sizeof(a)/sizeof(a[0])
并不能达到您的预期,因为传递给函数的数组“衰减”到指针。尝试将数组的大小显式地作为参数之一传递。