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