質問: number_inp[i] - '0'; printf("%d", num[1]); return 0; } ``` ### 試したこと エラー内容を調べてみたところ領域を超えて確保してしまった、という内容でした。 書式文字列がいまいち理解できず、躓いています。 char型からint型にする際に符号拡張されてしまうという話も聞いてunsignedも試してみましたがよくわかりませんでした。 変換指定子や変数型の理解が足りてないならばそちらのキーワードを教えていただけるとありがたいです。 ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: scanf している箇所は4バイトのバッファを指定しています。ですので `123456` といった文字を入力するとバッファを超えて格納されます。おそらく NUL 分入れて5バイト必要ですね。 scanf が良く無い API とされている理由がこれです。 安全に行うには ``` char buf[256]; fgets(buf, sizeof(buf), stdin); sscanf(buf, "%s", number_inp); ``` の様に十分なバッファで読み込ませるか ``` scanf("%3s", number_inp); ``` の様にサイズ指定されると良いかと思います。 追記 警告を消すには `scanf_s` を使って下さい。 ``` scanf_s("%s", &number_inp, 3); ```