課題をやっておりまして、
(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 の確保のしかたが違うような気がするのですが・・・・
警告を消すためにプログラムをどう改良すればいいのか
よろしくお願いします。