gpt4 book ai didi

c - 数组 C 程序的段错误

转载 作者:行者123 更新时间:2023-11-30 20:38:24 24 4
gpt4 key购买 nike

由于某种原因,我在 let[i] = all(4,4,'a','z'); 行遇到段错误。我不明白为什么。我试图将 aaaa - zzzz 放入一个数组中,然后将这些值与加密的密码进行一一比较。任何建议都会有所帮助。谢谢。我给出了引起问题的两个代码片段。

 char* all(int a, int n,char begin, char end){
int i, j;
int k = 0;
char *c = malloc((n+1)*sizeof(char));

char msg[] = "";
k = strlen(msg);
for(i = a; i <= n; i++)
{
for(j=0;j<i;j++) c[j]=begin;
c[i]=0;
do {
for(int g = 0; g < k; g++)
msg[g] = *c;
} while(inc(c,begin,end));
}
return c;
free(c);
}

int main(int argc, char* argv[])
{
char *result;
char **let;

int f = open("pass.txt", O_RDONLY);
if (f < 0)
return 0;
char buf[1024];
while (my_fgets(buf, sizeof(buf), f))
{
int i = 0;
let[i] = all(4,4,'a','z');

result = crypt(argv[i+1], buf);
i++;
int ok = strcmp (result, buf) == 0;

return ok ? 0 : 1;

}
free(let);
close(f);
}

完整的程序可以在这里找到:

http://pastie.org/10035996

最佳答案

您希望 let 成为(指向单个)字符串的数组。您正在为字符串分配存储空间,而不是为数组本身分配存储空间。因此,要么声明:

char *let[MAX_STRINGS];

如果您在编译时已知最大数量的字符串,或者动态分配它:

let = malloc (sizeof (char *) * whatever_number);

在这两种情况下,您都必须注意在输入阶段不要超过分配数量。如果您希望能够处理任何可能数量的输入字符串,您将必须更改数据结构,也许更改为链接列表,但我想这对您来说目前是一个高级主题。

另请注意,代码中现在的 free(let) 只会释放数组本身的内存,但在此之前您还需要释放各个字符串。基本上,您必须为代码中的每个 malloc() 执行 free()

关于c - 数组 C 程序的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29129909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com