頼むのでもうちょっと見やすくコードを整形してください。
c
1#include <stdio.h>
2
3void convert(int n, int *arlist)
4{
5 int i = 0, digit = 0, k = n;
6 while (k != 0) {
7 k = k / 10;
8 digit++;
9 }
10 for (; digit > 0; digit--) {
11 arlist[i] = n % (10 * (digit - 1));
12 i++;
13 }
14}
15int main(void)
16{
17 int n;
18 int arlist[15] = {0};
19 scanf("%d", &n);
20 convert(n, arlist);
21 printf("%d", arlist[1]);
22 return 0;
23}
で、こういうときはUndefined Behavior Sanitiserの出番です。
https://wandbox.org/permlink/MPodiZj3oSgfMyIp
prog.cc:11:23: runtime error: division by zero
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog.cc:11:23 in
UndefinedBehaviorSanitizer:DEADLYSIGNAL
==22==ERROR: UndefinedBehaviorSanitizer: FPE on unknown address 0x0000004269ef (pc 0x0000004269ef bp 0x7ffe95429320 sp 0x7ffe954292b0 T22)
#0 0x4269ef (/home/jail/prog.exe+0x4269ef)
#1 0x426b67 (/home/jail/prog.exe+0x426b67)
#2 0x7f7be5b5c82f (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
#3 0x403008 (/home/jail/prog.exe+0x403008)
UndefinedBehaviorSanitizer can not provide additional info.
SUMMARY: UndefinedBehaviorSanitizer: FPE (/home/jail/prog.exe+0x4269ef)
==22==ABORTING
つまるところ、n % (10 * (digit - 1))
はdigit
が1
のとき0除算になるということでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/29 05:00