#1
by fukeroku » 1年前
1問20点のクイズを5問出題し、得点を表示した後に回答の履歴を正不と一緒に表示するプログラムを作っているのですが、回答履歴の文字列の先頭にフフフフフフフフ.....というものが大量に出てしまいます。それと同時に、「Run-Time Check Failure #2 - Stack around the variable 'defo2' was corrupted.」というエラーも吐いています。メモリがオーバーフローしているのはなんとなくわかりますが、どこを直せばいいのかわかりません。以下、ソースコードです
コード:
#include<stdio.h>
#include<string.h>
char checkanswer(char ans[], char defo[], char log[])
{
int result = strcmp(ans, defo);
if (result == 0)
{
printf("正解です\n");
strcat(log, ":○ ");
}
else
{
printf("不正解です\n");
strcat(log, ":× ");
}
return result;
}
int main(void) {
int sum = 0;
char ans[100];
char log[200];
printf("問1:日本の首都は?\n");
scanf("%s", &ans);
char defo1[] = "東京";
if (checkanswer(ans, defo1, log) == 0)
sum += 20;
printf("問2:日本で一番高い山は?\n");
scanf("%s", &ans);
char defo2[] = "富士山";
strcat(log, defo2);
if (checkanswer(ans, defo2, log) == 0)
sum += 20;
printf("問3:2022年に公開された新海誠が監督した映画は?\n");
scanf("%s", &ans);
char defo3[] = "すずめの戸締り";
strcat(log, defo3);
if (checkanswer(ans, defo3, log) == 0)
sum += 20;
printf("問4:マリオの弟は?\n");
scanf("%s", &ans);
char defo4[] = "ルイージ";
strcat(log, defo4);
if (checkanswer(ans, defo4, log) == 0)
sum += 20;
printf("問5:昨日の明日は?\n");
scanf("%s", &ans);
char defo5[] = "今日";
strcat(log, defo5);
if (checkanswer(ans, defo5, log) == 0)
sum += 20;
printf("あなたの得点:%d\n", sum);
printf("あなたの回答:%s\n",log);
return 0;
}
1問20点のクイズを5問出題し、得点を表示した後に回答の履歴を正不と一緒に表示するプログラムを作っているのですが、回答履歴の文字列の先頭にフフフフフフフフ.....というものが大量に出てしまいます。それと同時に、「Run-Time Check Failure #2 - Stack around the variable 'defo2' was corrupted.」というエラーも吐いています。メモリがオーバーフローしているのはなんとなくわかりますが、どこを直せばいいのかわかりません。以下、ソースコードです
[code]#include<stdio.h>
#include<string.h>
char checkanswer(char ans[], char defo[], char log[])
{
int result = strcmp(ans, defo);
if (result == 0)
{
printf("正解です\n");
strcat(log, ":○ ");
}
else
{
printf("不正解です\n");
strcat(log, ":× ");
}
return result;
}
int main(void) {
int sum = 0;
char ans[100];
char log[200];
printf("問1:日本の首都は?\n");
scanf("%s", &ans);
char defo1[] = "東京";
if (checkanswer(ans, defo1, log) == 0)
sum += 20;
printf("問2:日本で一番高い山は?\n");
scanf("%s", &ans);
char defo2[] = "富士山";
strcat(log, defo2);
if (checkanswer(ans, defo2, log) == 0)
sum += 20;
printf("問3:2022年に公開された新海誠が監督した映画は?\n");
scanf("%s", &ans);
char defo3[] = "すずめの戸締り";
strcat(log, defo3);
if (checkanswer(ans, defo3, log) == 0)
sum += 20;
printf("問4:マリオの弟は?\n");
scanf("%s", &ans);
char defo4[] = "ルイージ";
strcat(log, defo4);
if (checkanswer(ans, defo4, log) == 0)
sum += 20;
printf("問5:昨日の明日は?\n");
scanf("%s", &ans);
char defo5[] = "今日";
strcat(log, defo5);
if (checkanswer(ans, defo5, log) == 0)
sum += 20;
printf("あなたの得点:%d\n", sum);
printf("あなたの回答:%s\n",log);
return 0;
}[/code]