Conversation
Notices
-
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:37:09 JST せのお (妹尾 賢) わからない。なぜ,これで@が表示されるんだ?
///////////////////////////////////////////////////////////////////////////////
/// \file find_array.c
/// \author SENOO, Ken
///////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <search.h>
#include <string.h>
int main(void) {
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);
void *entry = lfind(&(void *){"break"}, tab, &nel, sizeof(tab[0]), (int (*)(const void *, const void*))strcmp);
if (entry) {
printf("found: %p\n", (void *)tab);
printf("found: entry:%p\n", entry);
printf("found: %s:%p\n", tab[1], (void *)&tab[1]);
printf("found: %s\n", (char *)entry); // ここが@になる
} else {
puts("NOT FOUND");
}
return 0;
}-
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:45:11 JST せのお (妹尾 賢) ああ。ちょっと違うけどうまくいった。
ポイントはこれ。キャストして間接参照。
printf("found: %d\n", *(int *)entry); // ここが@になる
///////////////////////////////////////////////////////////////////////////////
/// \file find_array.c
/// \author SENOO, Ken
///////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <search.h>
#include <string.h>
int main(void) {
// char *tab[] = {
// "auto",
// "break"
// };
int tab[] = {1, 2, 3};
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);
// void *entry = lfind(&(void *){"break"}, tab, &nel, sizeof(tab[0]), (int (*)(const void *, const void*))strcmp);
void *entry = lfind(&(int){2}, tab, &nel, sizeof(tab[0]), (int (*)(const void *, const void*))strcmp);
if (entry) {
printf("found: %p\n", (void *)tab);
printf("found: entry:%p\n", entry);
printf("found: %d:%p\n", tab[1], (void *)&tab[1]);
printf("found: %d\n", *(int *)entry); // ここが@になる
} else {
puts("NOT FOUND");
}
return 0;
}やふりー likes this. -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:48:01 JST せのお (妹尾 賢) 同じように,文字配列にするとうまくいかない。なぜだろう。
printf("found: %s\n", *(char *)entry); // ここが@になるにゃぎゃーら repeated this. -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:49:18 JST せのお (妹尾 賢) アドレスが同じなんだから,データは取れているだろう。じゃあ,何がまずいのか。アドレスが取れているのだから,間接参照演算子で実体にアクセスできるんじゃないの? -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 21:11:29 JST せのお (妹尾 賢) うーん。アドレスは取れているのだけど,その実体の文字列がとれない。なぜだー!配列だからなのか? -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 21:21:00 JST せのお (妹尾 賢) わからない。スタックオーバーフローの日本語版に投げてみようかしら… -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 22:05:22 JST せのお (妹尾 賢) 質問したので,ご回答何卒よろしゅう…
c - C言語のlfind()で配列要素にマッチした文字列の参照方法 - スタック・オーバーフロー https://ja.stackoverflow.com/questions/45239/c%e8%a8%80%e8%aa%9e%e3%81%aelfind%e3%81%a7%e9%85%8d%e5%88%97%e8%a6%81%e7%b4%a0%e3%81%ab%e3%83%9e%e3%83%83%e3%83%81%e3%81%97%e3%81%9f%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e5%8f%82%e7%85%a7%e6%96%b9%e6%b3%95 -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 22:32:18 JST せのお (妹尾 賢) マイナーやから回答付かへんかな…teratailで質問したほうが良かったかしら… In conversation permalink -
せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Tuesday, 03-Jul-2018 21:59:36 JST せのお (妹尾 賢) 投稿してから1-2時間後にめちゃくちゃ詳しい回答ついていた!メール通知来るようにしたつもりだったのだけど…気づかなかった…
うーん…なんか全然わかっていなくて,へこむ…C言語難しい…
https://ja.stackoverflow.com/a/45241/29148In conversation permalink Attachments
-