NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

getenv(),atoi()について

投稿者:Giantsさん  2003/12/26 09:57  MLNo.388   [メール表示]

おはようございます。
Giantsと申します。
以下のコードにおいて

#include <stdio.h>
#include <stdlib.h>
#define FRAME_LENGTH 123

int main(){
int x;
x=atoi(getenv("FRAME_LENGTH"));
printf ("x=%d",x);
}

とした時
「不正な処理をしたので強制終了されます」の
エラーメッセージが出ます。

次に以下のコードでは
#include <stdio.h>
#include <stdlib.h>
#define FRAME_LENGTH 123
#define DEFAULT_FRAME_LENGTH 123

int main(){
int x;
x=getenv("DEFAULT_FRAME_LENGTH")
?atoi(getenv("FRAME_LENGTH"))
:DEFAULT_FRAME_LENGTH;
printf ("x=%d",x);
}

のコードではDEFAULT_FRAME_LENGTHの数字が
プリントされますがFRAME_LENGTHの数字は
プリントされません。

最初のコードのFRAME_LENGTHが定義されてないのがエラーの原因と
と推測するのですが、そうだとしたらなぜ定義されないのですか?
またどうすればプリントされますか?
アドバイスお願いします。


このエントリーをはてなブックマークに追加


  • MLNo.389   さん  (0) 2003/12/26 10:26  [メール表示する]

    天野です。

    getenv,defineの意味をそれぞれご存知でしょうか?

    getenvは「環境変数」を取得する関数、
    defineはマクロです。

    > #define FRAME_LENGTH 123
    しても
    > x=atoi(getenv("FRAME_LENGTH"));
    このステートメントに対する意味はありません。

    単にFRAME_LENGTHという「環境変数」を取得しようとします。

    この場合手元の環境ではFRAME_LENGTHという環境変数が設定されて
    いなければNULLを返す。と、定義されています。
    (これは環境依存かもしれませんので調べてみて下さい)

    おそらくatoiにNULLを渡してるのでしょうか?

    char *env = getenv("FRAME_LENGTH");
    if( env != NULL ) x = atoi(env);

    とかしてみたらどうですか?


    ちなみにwindowsだと環境変数はコントロールパネルから
    設定するんですよね?

    DOSプロンプトからも
    set FRAME_LENGTH=132
    とかすればいけるんでしょうか?



  • MLNo.390   FUJIHARA Keiichiさん  (0) 2003/12/26 10:30  [メール表示する]
    藤原と申します。

    This message is reply to Giants - san
    (Subject was : [beginers:0388] getenv(),atoi()について)

    Message-ID: <4576987.1072400256292@…>
    in Fri, 26 Dec 2003 09:57:36 +0900 (JST) ...

    > 以下のコードにおいて
    >

    > 「不正な処理をしたので強制終了されます」の
    > エラーメッセージが出ます。

     まず、「getenv() の使い方をもう一度調べましょう」
    というのが回答です。

     getenv() と、#define は全く関係ありません。
     どういう #define があっても、getenv() には伝わりません。
     getenv() が対象にするのは、「環境変数」です。

    > 次に以下のコードでは

    > x=getenv("DEFAULT_FRAME_LENGTH")
    > ?atoi(getenv("FRAME_LENGTH"))
    > :DEFAULT_FRAME_LENGTH;


    > のコードではDEFAULT_FRAME_LENGTHの数字が
    > プリントされますがFRAME_LENGTHの数字は
    > プリントされません。

     こちらは、環境変数(#define ではなく)に、"DEFAULT_FRAME_LENGTH"
    が定義されていないためです。
     このとき、getenv("DEFAULT_FRAME_LENGTH") は、 NULL を返しますが、
    これは、条件としては、「定数0」すなわち、「偽」ですから、
    : の後ろの、DEFAULT_FRAME_LENGTH が代入されます。

    --
    _/ -- Last 5560 hours until ATHENS 2004 Olympic Games -------------
    _/ FUJIHARA Keiichi
    _/ E-Mail : keiichi@… <or> nagi@…
    _/ URL : http://www.keiichi.fujihara.name/
    ------------------------------------------+----- Luna Phase 3.02 --
    PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178 C348 CD65 7F08 D68F 69F6




メールへの返信はMLのメンバーしかできません。

更新順メールリスト