Conversation
Notices
-
帰宅したら、C言語のlfind関数について調べよう。C言語は配列の一括操作は基本的に自分でforループ必要。lfindは配列から値を線形探索してくれる。貴重な関数。
- にの likes this.
-
POSIX 2001から定義されている。1995のSVID 4thでも定義されている。
その他,SUSv2 1994からも定義されている。UNIX系OSでは使えると思ってよさそうだ。
http://pubs.opengroup.org/onlinepubs/9699919799.2018edition/
-
こんな感じでかなりいいところまでいけている。だけど,lfindで取得したものはポインターなんだけど,ここにマッチした文字列がうまくとれない。アドレスが入っているなら*で取れるかと思ったけどだめ。検索のキーで参照自体はできるのだけど。もどかしい。
///////////////////////////////////////////////////////////////////////////////
/// \file find_array.c
/// \author SENOO, Ken
///////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <search.h>
#include <string.h>
int main(void) {
static const char *tab[] = {
"auto",
"break"
};
size_t nel = sizeof(tab)/sizeof(tab[0]);
// char *target = "break";
// char *entry = lfind(&target, tab, &nel, sizeof(tab[0]), (int (*)(const void *, const void*))strcmp);
char *entry = lfind(&(void *){"break"}, tab, &nel, sizeof(tab[0]), (int (*)(const void *, const void*))strcmp);
if (entry) {
printf("found: %s\n", "break");
} else {
puts("NOT FOUND");
}
return 0;
}