Вы не можете передать strcmp()
в качестве функции сравнения для bsearch()
. Эта функция должна принимать указатели на сравниваемые элементы (в этом случае указатель на указатель на строку, хотя фактический тип аргументов функций должен быть const void *
), тогда как strcmp()
ожидает указатель на строку , Существует дополнительный слой косвенности, который он не обрабатывает.
Вы не показываете эту функцию, но возможно использовать функцию cstring_cmp()
, которую вы используете с qsort()
.
Первым аргументом функции сравнения bsearch()
является указатель, указанный как ключ, второй аргумент - указатель на текущий элемент сравниваемого массива, где с функцией сравнения qsort()
оба аргумента являются указателями на элементы. Поэтому, если вы сделаете ключевой аргумент bsearch()
указателем на то, что вы ищете, оба будут работать с одной и той же функцией. Другими словами, bsearch(&key, ...)
хорош, bsearch(key, ...)
- нет. Вы также можете использовать функцию сравнения bsearch()
, которая будет работать с этим вторым случаем. См. https://stackoverflow.com/a/15824981/9952196 для примера.
Вот довольно быстрое и грязное решение с использованием только CSS.
*[data-tooltip] {
text-decoration: underline dashed;
position: relative;
}
*[data-tooltip]:hover:before {
background: #333;
border-radius: 4px;
color: #ccc;
content: attr(data-tooltip);
padding: 2px 4px;
position: absolute;
white-space: nowrap;
top: calc(100% + 4px);
}
*[data-tooltip]:hover:after {
background: #333;
content: '';
width: 6px;
height: 6px;
position: absolute;
white-space: nowrap;
top: calc(100% + 1px);
left: 8px;
transform: rotate(45deg);
}
foo <span data-tooltip="This field represents what foo needs">bar</span> baz
Если ваш текст всплывающей подсказки известен, вы даже можете избавиться от атрибута data-tooltip
, и запекать его в свойство content
в CSS:
.tooltip {
text-decoration: underline dashed;
position: relative;
}
.tooltip:hover:before {
background: #333;
border-radius: 4px;
color: #ccc;
padding: 2px 4px;
position: absolute;
white-space: nowrap;
top: calc(100% + 4px);
}
.tooltip:hover:after {
background: #333;
content: '';
width: 6px;
height: 6px;
position: absolute;
white-space: nowrap;
top: calc(100% + 1px);
left: 8px;
transform: rotate(45deg);
}
.tooltip.tt-bar:hover:before {
content: 'This field represents what foo needs';
}
foo <span class="field tooltip tt-bar">bar</span> baz