回答編集履歴

2

表現変更

2022/05/02 22:54

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -1,4 +1,4 @@
1
- 配列ansを関数checkへ正しく渡せていないのではなく、関数checkを呼び出す前配列ansの中身が破壊されているのではないでしょうか。
1
+ 配列ansを関数checkへ正しく渡せていないのではなく、関数checkを呼び出す前の時点で配列ansの中身が破壊されているのではないでしょうか。
2
2
 
3
3
  C言語の文字列の末尾には、ヌル文字`'\0'`を追加する必要があるので、4文字の文字列を保存するためには、長さ5の文字配列が必要となります。
4
4
  しかし、現状`num`の長さが4しかないので、`scanf`で4文字の文字列を読み込んだ際に、範囲外の5番目の位置に`'\0'`を書き込んでしまいます。

1

質問に合わせた回答に変更

2022/05/02 22:51

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -1,5 +1,7 @@
1
- `char num[DIG];``char num[DIG+1];`に変更してみてさい。
1
+ 配列ans関数checkへ正く渡せいないのではな、関数checkを呼び出す前に配列ansの中身が破壊れてるのではないでしょうか
2
2
 
3
3
  C言語の文字列の末尾には、ヌル文字`'\0'`を追加する必要があるので、4文字の文字列を保存するためには、長さ5の文字配列が必要となります。
4
4
  しかし、現状`num`の長さが4しかないので、`scanf`で4文字の文字列を読み込んだ際に、範囲外の5番目の位置に`'\0'`を書き込んでしまいます。
5
5
  今回は、たまたまその範囲外にあるのが`ans`だったので、`ans`の先頭がヌル文字`'\0'`に書き換わって、長さ0の文字列になってしまったものと思われます。
6
+
7
+ 修正するには、`char num[DIG];`を`char num[DIG+1];`に変更してみてください。