OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

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

  • すぐに回答を!
  • 質問No.134802
  • 閲覧数12765
  • ありがとう数6
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 29% (7/24)

Visual C++で、Cのプログラムを作成しているものです。(OS:WinNT 4.0)
文字列の扱いについて、質問します。

関数 int func(char *str) があると仮定します。
パラメータとして、strは以下のような状態あるとします。
(strは関数が呼ばれる前にcalloc()で領域確保済み)
 シンボル名 値
 str      0x00000001 ""
上記の状態で、strがNULLか空文字列("")であることを条件式にしたいのですが、str == NULL は偽となり、strcmp(str, "") を使用すると異常終了します。
どうしたらよいのでしょうか。アドバイスをお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 40% (230/562)

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

char *buf = calloc(1, 16);
func(buf);

これで正しく動作しませんか?

ちなみに、空白文字列であるかどうかは

*str == '\0'

で確認できますよ。
こちらのほうがはるかに高速です。
  • 回答No.2
レベル7

ベストアンサー率 38% (7/18)

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

#defineERROR(-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

お礼率 29% (7/24)

実は、プログラムを確認すると、構造体のメンバ(char *)がパラメータとなっていました。
回答、ありがとうございました。
投稿日時 - 2001-09-13 16:03:53
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ