调用函数

时间:2017-12-13 08:37:40

标签: c arrays function pointers recursion

我有这个递归函数,它从字典中创建所有可能的字符串并加密它们,以便可以将它们与一些保存的哈希值进行比较。

之前,我为密码的最大长度设置了一些预定义值,但我尝试使用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);
}

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

printf("Argv[1] :  %s\n", max_l);

这是未定义的行为。您提供了错误的格式说明符。这就是为什么你遇到seg错误,你试图使用int格式说明符打印%s。它会查找\0然后它不会。因此它访问了一些它不应该导致UB的内存。 (这导致了分段错误)。

应该是

 printf("Argv[1] :  %d\n", max_l);

另一个主要问题是并非此递归函数的每个控制流都返回int。这是解决更大问题的途径。如果预期没有返回值,则行为将是未定义的。