c - 调用函数时出现段错误

标签 c arrays function pointers recursion

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

之前,我对密码的最大长度有一些预定义值,但我尝试使用 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/

相关文章:

c - 高级语言来为您的程序制作原型(prototype)?

c - 弗特尔停止回归?

javascript - 映射从 React 上的 aws-sdk 返回的数据

javascript - 如何编写一个在几秒钟后撤消操作的函数?

r - 如何将数据帧 A 中的每一列重复除以数据帧 B 中同一列的中位数?

c - 未定义对 "calcyear"的引用

计算包含 1 的子集的数量

java - Java数组中的某些字段为空,处理这些

c# - 初始化字符串数组的选项

java - 如何将数字存储在数组中?