課題をやっておりまして、
(1) 二次元配列を動的に生成して、その配列に文字列"TOKYO"と"SAITAMA"を格納して表示する
(2)struct student構造体オブジェクトを要素とする一次元配列を動的に生成して、
その配列にメンバの値を格納して表示する
二つの条件を元にプログラムを作成しました
#include<stdio.h> #include<string.h> #include<stdlib.h> #define STR_LENGTH 2 //文字列の長さ #define STR_NUMBER 2 //文字列の数 #define STR_NAME 6 //構造体を宣言する struct student { //名前、身長、体重を構造体オブジェクトのメンバに格納する関数の定義 char name[STR_NAME]; int math; int eng; }; //すべての文字列を一度に表示する関数の関数定義 void print_str(char *p) { puts(p); } int main(void) { int i,j; char (*a)[STR_NAME] = NULL;//確保される記憶域の先頭アドレスを格納するための配列を宣言・定義する struct student *b = NULL;//確保される記憶域の先頭アドレスを格納するための構造体を宣言・定義する a = malloc(STR_LENGTH * STR_NAME * sizeof(char)); b = malloc(2 * sizeof(struct student)); if(a == NULL) //本当に記憶域が確保できたかを確認する { puts("記憶域の確保に失敗しました"); return NULL; //ここでプログラムを終了する } else if(b == NULL) //本当に記憶域が確保できたかを確認する { puts("記憶域の確保に失敗しました"); return NULL; //ここでプログラムを終了する } strcpy(a[0],"TOKYO"); strcpy(a[1],"SAITAMA"); puts("各文字列を表示します") ; for(i=0; i < STR_LENGTH; i++) print_str(&a[0]); //すべての文字列を出力する strcpy(b[0].name,"TANAKA"); b[0].math=75; b[0].eng=60; strcpy(b[1].name,"YAMAMOTO"); b[1].math=85; b[1].eng=90; puts("各生徒の成績を表示します"); for (j=0; j < STR_NUMBER; j++) printf("Name: %s\nMath: %d\nEng: %d\n",b[j].name,b[j].math,b[j].eng); free(a); //記憶域を解放して破棄する free(b); //記憶域を解放して破棄する return 0; }
実行結果が出るのですがどうしても警告が残ってしまいます。
警告 W8004 222.c 31: 'b' に代入した値は使われていない(関数 main )
警告 W8004 222.c 29: 'a' に代入した値は使われていない(関数 main )
a の確保のしかたが違うような気がするのですが・・・・
警告を消すためにプログラムをどう改良すればいいのか
よろしくお願いします。