我有这个递归函数,它从字典中创建所有可能的字符串并加密它们,以便可以将它们与一些保存的哈希值进行比较。
之前,我为密码的最大长度设置了一些预定义值,但我尝试使用argv[1]
进行更改。
但是当我执行我的程序时,我得到Segmentation Fault
没有解释。
顺便说一句,所有的包含都按照应有的方式存在,但我没有将它们放在帖子中,因为它有些瑕疵。
int recur(char * mot , char * tab,int l,int max_l)
{
// Because this was an exercice we had to do in class , i deleted this part
// so some of my classmates dont copy/paste my code
// if you are interested , contact me
int main(int argc, char *argv[])
{
char letters[36] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'};
char s[10]="";
s[9]='\0';
int l=0;
int max_l;
sscanf (argv[1],"%d",&max_l);
printf("max_l : %i\n",max_l);
printf("Debut ! \n");
recur(s,letters,l,max_l);
}
谢谢你的时间!
答案 0 :(得分:3)
printf("Argv[1] : %s\n", max_l);
这是未定义的行为。您提供了错误的格式说明符。这就是为什么你遇到seg错误,你试图使用int
格式说明符打印%s
。它会查找\0
然后它不会。因此它访问了一些它不应该导致UB的内存。 (这导致了分段错误)。
应该是
printf("Argv[1] : %d\n", max_l);
另一个主要问题是并非此递归函数的每个控制流都返回int
。这是解决更大问题的途径。如果预期没有返回值,则行为将是未定义的。