【问题标题】:bsearch with dynamic arrays in C在 C 中使用动态数组进行 bsearch
【发布时间】:2015-09-06 19:14:44
【问题描述】:

您好,我在使用 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);

'file_array' 是我的动态字符串数组,包含 2401 个元素。从 *.txt 文档中导入的每个元素最长为 22 个字符。

'linecount' 是整数 2402,指的是同一 *.txt 文档中的行号。

'WORDMAX'定义为20

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

【问题讨论】:

标签: c arrays binary-search dynamic-arrays bsearch


【解决方案1】:

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

【讨论】:

  • file_array 填充如下: " strcpy(file_array[i], ln); " ln 定义为 " char ln[WORDMAX+2]; " 所以每个 Item 应该有 22 位。 * 哪里不见了?我已经从那里复制了比较热:bytes.com/topic/c/answers/667528-bsearch-dynamic-array
  • 所以每个字符数组都是 22 个字符长?如果那是正确的,char 数组的大小不会是 22 字节
  • 你在哪里,正确的大小值是“4”。得到了应有的试验和错误方法,但没有认真的解释......
  • 所以它现在可以工作了吗?我知道你从哪里得到 22 (只是看了更多你给我的链接)。而且,大小可能是键的大小,而不是数组中对象的大小。您的密钥是如何定义的?如果您正在处理字符串,则可能是键有问题
  • 我的密钥是从用户输入中获取的,它的可变长度最多为 20。目前我的测试运行良好,使用“sizeof *file_array”作为大小参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2020-03-26
  • 2020-06-24
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多