• 締切済み

文字列がNULLか空文字列かの判定

Visual C++で、Cのプログラムを作成しているものです。(OS:WinNT 4.0) 文字列の扱いについて、質問します。 関数 int func(char *str) があると仮定します。 パラメータとして、strは以下のような状態あるとします。 (strは関数が呼ばれる前にcalloc()で領域確保済み)  シンボル名 値  str      0x00000001 "" 上記の状態で、strがNULLか空文字列("")であることを条件式にしたいのですが、str == NULL は偽となり、strcmp(str, "") を使用すると異常終了します。 どうしたらよいのでしょうか。アドバイスをお願いします。

みんなの回答

  • DaddyBear
  • ベストアンサー率38% (7/18)
回答No.2

No1の方の回答にあるように、calloc()で取れた領域のアドレスを正しく渡せてないように思えますが... #define ERROR (-1) int func(char *str) {   if( (!str) || (!strlen(str)) ) return ERROR;   return strlen(str); } void main() {   char *p=(char*)calloc(10,10);   printf("%d\n",func(p)); }

finalanswer
質問者

お礼

実は、プログラムを確認すると、構造体のメンバ(char *)がパラメータとなっていました。 回答、ありがとうございました。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.1

callocが正しく動作していないか、正しい使い方ができていないかです。 char *buf = calloc(1, 16); func(buf); これで正しく動作しませんか? ちなみに、空白文字列であるかどうかは *str == '\0' で確認できますよ。 こちらのほうがはるかに高速です。

関連するQ&A

専門家に質問してみよう