【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19395

構造体の宣言
投稿者---BOO(2005/01/23 06:06:22)


C言語初心者のBOOです。

勉強してまだ間もないので、質問的には
低レベルな質問かもしれませんがご了承
ください。

質問に対する冷やかしなどは辞めてください。

struct{
    char *en;
    char *ja;
}string_resources[]={
  {"Unknown user id:","ユーザーIDは定義されていません:"},
  {"Password:","パスワード:"},
  {"Sorry:","パスワードが違います:"}
};

char *getmsgstr(int msgno)
{
    static char msgbuf[256];

    if (strncmp(getenv("LANG"),"ja",2))
        snprintf(msgbuf,256,string_resources[msgno].en);
    else
        snprintf(msgbuf,256,string_resources[msgno].ja);
    return(msgbuf);
}


構造体もとりあえず勉強したのですが、上記の宣言の方法は
初めて目にして面食らいました。

上記のような宣言の方法と言うものはありえるのでしょうか?
まぁ、ありえるから書いてあったんですけど・・・

上記の構造体の宣言でなぜ、英語側と日本語側の使い分けが
出来るのですか?

上記の構造体についてお話していただける方いないでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体の宣言 19396 επιστημη 2005/01/23 07:17:22
<子記事> Re:構造体の宣言 19400 さむい 2005/01/23 12:16:14
<子記事> Re:構造体の宣言 19402 ぽへぇ 2005/01/23 12:50:41
<子記事> Re:構造体の宣言 19403 Craft 2005/01/23 13:35:47


No.19396

Re:構造体の宣言
投稿者---επιστημη(2005/01/23 07:17:22)


>構造体もとりあえず勉強したのですが、上記の宣言の方法は
>初めて目にして面食らいました。

どこに面食らったのでしょうか?
構造体の中にchar*がふたつあるだけですが。

>上記のような宣言の方法と言うものはありえるのでしょうか?
>まぁ、ありえるから書いてあったんですけど・・・

ごく普通の宣言です。

>上記の構造体の宣言でなぜ、英語側と日本語側の使い分けが
>出来るのですか?

使い分け? 環境変数の値に応じてen/jaのどちらかを選択しているだけです。



この投稿にコメントする

削除パスワード

No.19398

お前に聞いてない!
投稿者---BOO(2005/01/23 11:29:44)


投稿するなっていっただろ!

いちいちうるせえ!




この投稿にコメントする

削除パスワード

No.19404

掲示板上での暴言はお慎みください
投稿者---管理人(2005/01/23 13:37:08)


よろしくお願いいたします。


この投稿にコメントする

削除パスワード

No.19400

Re:構造体の宣言
投稿者---さむい(2005/01/23 12:16:14)


その構造体自体は英語用のメッセージ(en)と
日本語用のメッセージ(ja)の両方を保持しているだけの物で、
どっちを表示するかの判断は、
関数:char *getmsgstr(int msgno)で行っている。



この投稿にコメントする

削除パスワード

No.19402

Re:構造体の宣言
投稿者---ぽへぇ(2005/01/23 12:50:41)


どういう回答を期待しているのか知らないけれど、
以下のどのソースなら理解できますかね?
cmpへの代入を(例えば) cmp = 1; にするとメッセージが変わります。

-------- 例1. -------
#include    <stdio.h>

int main(void)
{
    int cmp = 0;
    char en[] = "English";
    char ja[] = "日本語";

    if (cmp == 0)
        printf("%s", en);
    else
        printf("%s", ja);
    return 0;
}

-------- 例2. -------
#include <stdio.h>
#include <string.h>

struct{
    char m_en[10];
    char m_ja[10];
} string_res;

int main(void)
{
    int cmp = 0;
    strcpy(string_res.m_en, "English");
    strcpy(string_res.m_ja, "日本語");

    if (cmp == 0)
        printf("%s", string_res.m_en);
    else
        printf("%s", string_res.m_ja);
    return 0;
}

-------- 例3. -------
#include <stdio.h>

struct{
    char m_en[10];
    char m_ja[10];
} string_res = {
  "English","日本語",
};

int main(void)
{
    int cmp = 0;

    if (cmp == 0)
        printf("%s", string_res.m_en);
    else
        printf("%s", string_res.m_ja);
    return 0;
}

-------- 例4. -------
#include <stdio.h>

struct{
    char *m_en;
    char *m_ja;
} string_res = {
  "English","日本語",
};

int main(void)
{
    int cmp = 0;

    if (cmp == 0)
        printf("%s", string_res.m_en);
    else
        printf("%s", string_res.m_ja);
    return 0;
}





この投稿にコメントする

削除パスワード

No.19403

Re:構造体の宣言
投稿者---Craft(2005/01/23 13:35:47)


>構造体もとりあえず勉強したのですが、上記の宣言の方法は
>初めて目にして面食らいました。
>
>上記のような宣言の方法と言うものはありえるのでしょうか?

こっちの部分も知りたいように見受けられたので追記しておきます。
この構造体の記述は、宣言と初期化を一緒にやっているのでこのような形をしています。
宣言と、初期化を2つに分けると、次のような形になります。

struct res {
    char *en;
    char *ja;
};
struct res string_resources[]={
  {"Unknown user id:","ユーザーIDは定義されていません:"},
  {"Password:","パスワード:"},
  {"Sorry:","パスワードが違います:"}
};

見た目で違うことは、構造体名resを省略していることくらいですが、構造体定義を再利用しない場合は便利な使い方です。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧