以下のような定義の構造体があります。
この構造体のメンバであるchar型配列Cが、
【実行】にあるようにif文で使われている時にelseの処理2を実行する事ができませんでした。
char型の変数だと、'\0'が入っていればelseとなるのですが、
配列となっているCにstrcpyで'\0'や0,NULLを設定してみてもelseにはなりませんでした。
この様なif文でelseの処理2を実行するにはどうすれば良いのでしょうか?
初歩的な質問かも知れませんが、回答頂けると幸いです。
【定義】
typedef struct
{
struct
{
char C[100];
}B
}A
【実行】
static A* hoge;
hoge = (A*)malloc(sizeof(A));
if(A->B.C)
{
処理1
}else{
処理2
}
No.2ベストアンサー
- 回答日時:
ポインタ/配列と数値の違いを理解するようにしましょう。
char C[100]とあるように、Cはcharの配列です。
> A->B.C
と、Cだけ書いた場合は、配列の先頭アドレスになります。
A->B.C == &(A->B.C[0])
配列として領域がちゃんと確保されているので、アドレスはNULLにはなっていません。
NULLでないので、真となり、当然ifの方が実行されます。
Cを文字列として利用していて、空文字列(長さ0の文字列)かどうかの判定したいのだったら、例えば次のような方法を使います。
if ( A->B.C[0] != '\0' ) /* 先頭が\0 → 長さが0 */
if ( A->B.C[0] != 0 ) /* 別表記 */
if ( A->B.C[0] ) /* 0でない→真 ということを利用 */
if ( strcmp(A->B.C,"") != 0 ) /* 「空文字列では無い」という意味を明記 */
> Cにstrcpyで'\0'や0,NULLを設定
これ、具体的にどうやったんですか?
strcpy(A->B.C, '\0');
strcpy(A->B.C, 0);
strcpy(A->B.C, NULL);
だとしたら、「Cに空文字列を設定」の意味にはなりません。
A->B.CがNULLということは、配列として領域が確保されていないことなるので、
if(A->B.C)では空文字列の判定ができないのですね。
ご丁寧な説明ありがとうございました。
> Cにstrcpyで'\0'や0,NULLを設定
これ、具体的にどうやったんですか?
おっしゃられる様に設定していました・・・。
アドレスに'\0'を指定しても空にはならないですね。。。
精進します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- JavaScript javascriptでif文と配列を組み合わせて運賃プログラムを完成させたいです。 1 2022/07/03 14:20
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- JavaScript jsで、配列内の文章を改行する際どのようにすればいいですか。 3 2022/07/05 20:40
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
先頭アドレスとは何ですか?
-
配列を使わずに、変数名を動的...
-
unsigned char配列への入力の仕方
-
Excel、VBAのユーザーフォーム...
-
【C言語】配列の中に配列を入れ...
-
ExcelVBAで質問です。離れた二...
-
テキストファイルから文字列を...
-
パイソンの
-
C言語で巨大配列を作るにはどう...
-
【速いブラインドタッチ】手を...
-
複数の選択範囲の行番号を個別...
-
C# 配列の変数宣言について。
-
配列の参照渡しで型が一致しま...
-
【VBS】 フォルダ直下のファイ...
-
プログラムが書けません。
-
配列同士の文字列の比較
-
配列を空にすること.
-
C言語でのカンマ区切りについて
-
ポインタの配列のコンマについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
配列の参照渡しで型が一致しま...
-
C# Listを使わずに2次元配列の...
-
VBで構造体の配列を関数に渡す...
-
複数の選択範囲の行番号を個別...
-
パイソンの
-
先頭アドレスとは何ですか?
-
【速いブラインドタッチ】手を...
-
C# 配列の変数宣言について。
-
C言語初心者 ポインタについて...
-
unsigned char配列への入力の仕方
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
Redimした動的配列はEraseする...
-
C言語で特定列だけを抽出して配...
-
擬似コード 長さがmの配列でな...
-
メモリの初期値
-
C言語初心者 構造体 課題について
おすすめ情報