senooken JP Social
  • FAQ
  • Login
senooken JP Socialはsenookenの専用分散SNSです。
  • Public

    • Public
    • Network
    • Groups
    • Popular
    • People

Conversation

Notices

  1. せのお (妹尾 賢) (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;
    }
    In conversation Monday, 02-Jul-2018 20:37:09 JST from web permalink
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:45:11 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      ああ。ちょっと違うけどうまくいった。
      ポイントはこれ。キャストして間接参照。
      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;
      }
      In conversation Monday, 02-Jul-2018 20:45:11 JST permalink
      やふりー likes this.
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:48:01 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      同じように,文字配列にするとうまくいかない。なぜだろう。

      printf("found: %s\n", *(char *)entry); // ここが@になる
      In conversation Monday, 02-Jul-2018 20:48:01 JST permalink
      にゃぎゃーら repeated this.
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 20:49:18 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      アドレスが同じなんだから,データは取れているだろう。じゃあ,何がまずいのか。アドレスが取れているのだから,間接参照演算子で実体にアクセスできるんじゃないの?
      In conversation Monday, 02-Jul-2018 20:49:18 JST permalink
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 21:11:29 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      うーん。アドレスは取れているのだけど,その実体の文字列がとれない。なぜだー!配列だからなのか?
      In conversation Monday, 02-Jul-2018 21:11:29 JST permalink
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 21:21:00 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      わからない。スタックオーバーフローの日本語版に投げてみようかしら…
      In conversation Monday, 02-Jul-2018 21:21:00 JST permalink
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 22:05:22 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      質問したので,ご回答何卒よろしゅう…
      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
      In conversation Monday, 02-Jul-2018 22:05:22 JST permalink

      Attachments

      1. C言語のlfind()で配列要素にマッチした文字列の参照方法
        from スタック・オーバーフロー
        C言語で,POSIXに規定されているlfind関数を使って,配列内の文字列のマッチを試しています。 マッチはできるのですが,肝心のマッチした文字列を参照できなくて困っています。 検証環境は以下のとおりです。 Ubuntu 16.04 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 サンプルコードを以下に示します。配列要素内の,"...
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Monday, 02-Jul-2018 22:32:18 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      マイナーやから回答付かへんかな…teratailで質問したほうが良かったかしら…
      In conversation Monday, 02-Jul-2018 22:32:18 JST permalink
    • せのお (妹尾 賢) (senooken@social.senooken.jp)'s status on Tuesday, 03-Jul-2018 21:59:36 JST せのお (妹尾 賢) せのお (妹尾 賢)
      in reply to
      投稿してから1-2時間後にめちゃくちゃ詳しい回答ついていた!メール通知来るようにしたつもりだったのだけど…気づかなかった…
      うーん…なんか全然わかっていなくて,へこむ…C言語難しい…
      https://ja.stackoverflow.com/a/45241/29148
      In conversation Tuesday, 03-Jul-2018 21:59:36 JST permalink

      Attachments


Feeds

  • Activity Streams
  • RSS 2.0
  • Atom
  • Help
  • About
  • FAQ
  • TOS
  • Privacy
  • Source
  • Version
  • Contact

senooken JP Social is a social network, courtesy of senooken. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.

Creative Commons Attribution 3.0 All senooken JP Social content and data are available under the Creative Commons Attribution 3.0 license.