Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中动态数组的研究_C_Arrays_Binary Search_Dynamic Arrays_Bsearch - Fatal编程技术网

C语言中动态数组的研究

C语言中动态数组的研究,c,arrays,binary-search,dynamic-arrays,bsearch,C,Arrays,Binary Search,Dynamic Arrays,Bsearch,您好,我对bsearch()函数有一些问题。我得到了“访问冲突读取位置”异常。 我使用它的方式如下: typedef char **arstr; int compareexp(const void *a, const void *b){ return strcmp(*(const arstr)a, *(const arstr)b); } binsrch = bsearch(&key, file_array, linecount, WORDMAX+2, compareexp)

您好,我对bsearch()函数有一些问题。我得到了“访问冲突读取位置”异常。 我使用它的方式如下:

typedef char **arstr;

int compareexp(const void *a, const void *b){ 
    return strcmp(*(const arstr)a, *(const arstr)b);
}

binsrch = bsearch(&key, file_array, linecount, WORDMAX+2, compareexp);
“文件数组”是我的动态字符串数组,包含2401个元素。从*.txt文档导入的每个元素最大长度为22个字符

'linecount'是整数2402,表示同一个*.txt文档中的行号

“WORDMAX”定义为20

我真的不明白我的函数失败的原因。
我猜linecount或WORDMAX中的值可能有问题。

在查看示例后,似乎您可能在comperison中缺少*或WORDMAX+2不是正确的方法。尝试更改WORDMAX以获得您正在使用的结构的大小

这是我的bsearch()的比较器参数,正如这里解释的那样,file_array填充如下:“strcpy(file_array[i],ln);”ln被定义为“char ln[WORDMAX+2];”,因此每个项都应该有22位。丢失的*在哪里?我从那里复制了comparesion therm:那么每个字符数组都有22个字符长?如果这是正确的,字符数组大小将不会是22字节。如果正确,则大小的正确值为“4”。得到了应有的尝试和错误的方法,并没有认真的解释…所以它的工作现在?我知道你从哪里得到了22(只是看了更多你给我的链接)。而且,大小可能是键的大小,而不是数组中对象的大小。你的钥匙是怎么定义的?如果您处理的是字符串,则可能是keyMy键有问题。我的键是从用户输入中提取的,它的可变长度最多为20。目前,我的测试运行良好,使用“sizeof*file_array”作为大小参数。