c 言語初心者です。
c 言語初心者です。
私は下記の構造体配列をつくりました。
しかしバッファオーバーランが起きてエラーが起きてしまいます。
ヒープ領域に問題があるのかもしれませんが、プログラム上どこに原因があるのかが良くわかりません。
どなたかよろしければ教えていただけないでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include<memory.h>
struct s
{ int i;
char name[25];
char huri[25];
char num[23];
};
void touroku(struct s *p);
void hyouji(struct s *p);
int main(void)
{ struct s data;
touroku( &data );
hyouji( &data );
//data.num *= 1; /* dataはポインタではないのでドット演算子 */
hyouji( &data );
return 0;
}
/* 構造体のメンバを設定する */
void touroku(struct s *p)
{ int i=0;
for(i=1;i<3;i++)
{
printf( "25文字以内の名前を入力して下さい\n" );
memset(p[i].name, 0, sizeof(p[i].name));
fgets( p[i].name,sizeof(p[i].name) , stdin );
if(strchr(p[i].name,'\n')==NULL)//バッファ処理
{
while(getchar() != '\n');
}
if(p[i].name[strlen(p[i].name)-1]=='\n')//改行解除
{
p[i].name[strlen(p[i].name)-1] = '\0';
}
printf("25文字以内のふりがなを入力してください\n");
memset(p[i].huri, 0, sizeof(p[i].huri));
fgets(p[i].huri,sizeof(p[i].huri),stdin);
if(strchr(p[i].huri,'\n')==NULL)//バッファ処理
{
while(getchar() != '\n');
}
if(p[i].huri[strlen(p[i].huri)-1]=='\n')//改行解除
{
p[i].huri[strlen(p[i].huri)-1] = '\0';
}
printf( "整数を入力して下さい\n" );
memset(p[i].num, 0, sizeof(p[i].num));
fgets(p[i].num,sizeof(p[i].num),stdin );
if(strchr(p[i].num,'\n')==NULL)//バッファ処理
{
while(getchar() != '\n');
}
if(p[i].num[strlen(p[i].num)-1]=='\n')//改行解除
{
p[i].num[strlen(p[i].num)-1] = '\0';
}
}
}
/* 構造体のメンバを出力する */
void hyouji(struct s *p)
{
int i=0;
for(i=1;i<3;i++)
printf("%-8s %3s %3s %d\n" ,p[i].name , p[i].huri , p[i].num , i);
puts("----------------------------------------------------------------");
return ;
}
お礼
回答をいただきまして有難う御座いました。 CnsktModule型をした構造体へのポインタ を返していることが理解できました。