プロが教えるわが家の防犯対策術!

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

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

A 回答 (2件)

callocが正しく動作していないか、正しい使い方ができていないかです。



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

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

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

*str == '\0'

で確認できますよ。
こちらのほうがはるかに高速です。
    • good
    • 1

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));
}
    • good
    • 1
この回答へのお礼

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

お礼日時:2001/09/13 16:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています