我有一个递归函数,它从字典中创建所有可能的字符串并对它们进行加密,以便它们可以与一些保存的哈希值进行比较。
之前,我对密码的最大长度有一些预定义值,但我尝试使用 argv[1]
更改它。
但是当我执行我的程序时,我收到一个没有解释的Segmentation Failure
。
顺便说一句,所有包含的内容都按其应有的方式存在,但我没有将它们放在帖子中,因为它有些错误。
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);
}
感谢您的宝贵时间!
最佳答案
printf("Argv[1] : %s\n", max_l);
这是未定义的行为。您给出了错误的格式说明符。这就是为什么当您尝试使用 %s
格式说明符打印 int
时出现段错误。它会查找 \0
,然后就找不到了。因此它访问了一些不应该导致 UB 的内存。 (这导致了段错误)。
应该是
printf("Argv[1] : %d\n", max_l);
另一个主要问题是,并非该递归函数的每个控制流都返回 int
。这是通向更大问题的途径。如果预期没有返回值,则行为将是未定义的。
关于c - 调用函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788671/