下記のFILEから呼び込んだ文字列を、自己参照構造体に入れたいと思っています。
ちなみに2つのファイルに分けてあります。
ダンプしてみると、1回転目は動くのですが、2回転目から同じメモリを指し、上書きのような感じになってしまいます。
自己参照構造体についてよくわかっていないので申し訳ございませんが、
どこが原因なのか教えてください。
また、どうやって自己参照構造体は順番を管理するのかも知りたいです。
(2次元配列では何行目と指定できたので…)
メイン関数側。
extern int Structure(char *mojiyoko, int no);
extern char mojiyoko[30+1]; //文字列の入力用。
色々省略~
FILE *fp;
if ((fp = fopen("..\\..\\a.txt", "r")) == NULL){ printf("エラーメッセージを表示する\n"); exit(1); } no = 1; while ((fgets(&mojiyoko[0], 256, fp)) != NULL){ //構造体に入れる。 Structure(&mojiyoko[0], no); //構造体の関数呼び出し。 } fclose(fp);
ここから別ファイル。
char mojiyoko[30+1]; //文字列の入力用。
//構造体mojiRの宣言。
typedef struct mojiR{
char mojiyoko[31];
int dan; //上から何段目か。
struct mojiR *next;
}MojiR;
int Structure(char *mojiyoko, int no)
{
MojiR dmy = { "", 0, NULL }; //構造体の終端はNULL。初期化。
MojiR *start = NULL; //先頭管理用の構造体を指す。
MojiR *wk; //複数ある構造体の中で、処理をしている構造体を指す。
MojiR *ip; //ループカウンター
//構造体1個分のメモリの確保。 wk = (MojiR *)malloc(sizeof(MojiR)); if (wk == NULL){ //メモリの確保失敗。 exit(1); } memset(wk, 0, 31); //最初のファイルから受け取った、文字列のコピー strcpy(wk->mojiyoko, &mojiyoko[0]); //チェーンに、はめ込む動作。 for (ip = start; ip->next != NULL; ip = ip->next){ if (wk->dan < ip->next->dan){ //もし下の段より、段の番号が小さければ繋ぎかえる。 wk->next = ip->next; ip->next = wk; break; } } //もし最大値だった場合は、1番後ろにつける。 if (ip->next == NULL){ ip->next = wk; wk->next = NULL; } return 0;
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/22 13:47
2015/10/22 14:09