構造体配列のポインタにNULLを設定したい – 固定ページ 2 – プログラミング – Home

構造体配列のポインタにNULLを設定し...
 
通知
すべてクリア

[解決済] 構造体配列のポインタにNULLを設定したい

固定ページ 2 / 2

yokoyoko
 yokoyoko
(@yokoyoko)
ゲスト
結合: 22年前
投稿: 14
Topic starter  

PAIさんへ

>では、この条件下でやりたい事を実現するには
>判別用のメンバー変数を追加するか、
>もしくは、今のメンバーに実際は取り得ない値を設定しておいて、
>それを判定に使用するとかしかできなさそうですね。

私のこのRESに対して、

>それをしたかったらこうしなきゃあかん
> struct MyStructure** pMyStruct = malloc( sizeof (struct MyStructure*) * 10 );
> for( i =0; i<10 ; i++){
> pMyStruct[i] = malloc( sizeof(struct MyStructure*) );
> }

というご指摘だったのでしょうか?

だとすると、構造体の既存メンバーに有り得ない値を設定して、

それを判定するというやり方が取れないという事なのでしょうか?

メンバー int n; に正の値しか代入されないという条件であれば

if( p_MyStruct[i].n == -1 )

で良いと思うのですが?


返信引用
t
 t
(@t)
ゲスト
結合: 22年前
投稿: 27
 

横からすみませんがこんなかんじですればいいんじゃないの?
dataの処理をYSのyes_or_noで判定するのはだめ?
#define pos 5
struct data
{
int d;
int check;
};

struct YS
{
struct data* D;
int yes_or_no;
};
void input(struct YS* ys,struct data *d)
{
struct data *p = (struct data*)malloc(sizeof(struct data));
*p = *d;
ys->D = p;
ys->yes_or_no = p->check;
}

void test(void)
{
struct YS* ys = (struct YS*)malloc(sizeof(struct YS)*pos);
struct data vol;
int i;
FILE *rf;
if(rf=fopen(test.dat,rb)) return;
for(i=0; i<pos; ++i){
fread(&vol,sizeof(struct data),1,rf);
input(ys+i,&vol);
}
}


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

> メンバー int n; に正の値しか代入されないという条件であれば
> if( p_MyStruct[i].n == -1 )
> で良いと思うのですが?
これで十分ですね


返信引用
yokoyoko
 yokoyoko
(@yokoyoko)
ゲスト
結合: 22年前
投稿: 14
Topic starter  

tさんへ

ご指摘ありがとうございます。

おっしゃる通りで、新たに変数なり構造体を追加する方法ですと

色々と実現方法はあるんですが、

できるだけ既存の構造体、ポインタで何とか判定できないかなと

思って質問させて頂いた次第です。

自分としては、p_MyStruct[i]が構造体配列のポインタであるならば、

p_MyStruct[i] = 0; とか、できないかなってコーディングしました。

配列、構造体、ポインタの知識がごっちゃになっている証拠みたいです。

それまで、何気に使えていた気分になっていたので分かったような

気持ちになっていたのでしょう。

とりあえず、RESありがとうです。


返信引用
yokoyoko
 yokoyoko
(@yokoyoko)
ゲスト
結合: 22年前
投稿: 14
Topic starter  

私が初めにやりたかった方法は、この条件下では不可能であると分かりました。

グローバルフラグも使わずに、メンバーも追加無しで

二つのテーブルのデータ格納状況を把握しようとしたのが無理がありましたね。

そのおかげで、私の理解不足もよく分かりましたし。

結局、二つのテーブルへ格納が完了した後で

条件によって、未格納となったテーブルに対して

どちらが未格納でどちらに格納済なのかを持たせる事にしました。

それを、別のところで判定する事にします。

RESくださった皆さん、どうもありがとうございました。


返信引用
t
 t
(@t)
ゲスト
結合: 22年前
投稿: 27
 

お役に立てて光栄です。
そして、補足。
>if(rf=fopen(test.dat,rb)) return;
if(!(rf=fopen(test.data,rb))) return;


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました