【发布时间】:2017-12-20 23:58:45
【问题描述】:
char i,j,k,l;
if(argc==2)
{
char a[5]="\0";
for(i='a';i<='z';i++)
{
a[0]=i;
printf("%s\n",a);
if(strcmp(crypt(a,"50"),argv[1])==0)
{
printf("%s\n", a);
break;
}
else{
for(j='a';j<='z';j++)
{
a[1]=j;
if(strcmp(crypt(a,"50"), argv[1])==0)
{
printf("%s\n", a);
break;
}
else
{
for(k='a';k<='z';k++)
{
a[2]=k;
if(strcmp(crypt(a,"50"), argv[1])==0)
{
printf("%s\n", a);
break;
}
else
{
for(l='a';l<='z';l++)
{
a[3]=l;
if(strcmp(crypt(a,"50"), argv[1])==0)
{
printf("%s\n", a);
break;
}
}
}
}
}
}
}
}
代码的主要部分是创建一组单、双、三和四字母字符串,然后在作为输入传递的散列代码中检查它们的加密散列 散列由 c 提供的 crypt 函数完成
为了检查原始程序中的错误,我使用了 printf 行
printf("%s\n", a);
我期望的输出是
a
b
c
d
e
(...)
但输出是:
azzz
bzzz
czzz
dzzz
(...)
许多人告诉我在最里面的循环中使用 printf 行,但它也不会改变原来的错误,即我的程序将无法生成一组单字符、双字符和三字符集。它将只能创建一个四个字符的字符串。
【问题讨论】:
-
尝试更改这一行:
char a[5]="\0";到char a[5] = {0}; -
@ErikW 这些初始化相同。
-
用独特的输出替换各种
printf("%s\n", a);,以帮助澄清看到的输出。printf("1 <%s>\n", a);printf("2 <%s>\n", a);... -
张贴
crypt()会有所帮助。