C言語中級編:整数の変換とエラーハンドリング

このQ&Aのポイント
  • C言語中級編では、整数の文字列からの変換とエラーハンドリングについて学習します。
  • 提供されたコードは、文字列として読み込んだ整数を変換して表示するプログラムです。
  • しかし、エラーメッセージが表示されており、無効な例外ハンドラールーチンが検出されたことが分かります。
回答を見る
  • ベストアンサー

C言語 中級編

失礼します。現在書籍にて勉強しているのですが、エラーが出てしまい調べてみたのですが原因がわかりません。何卒よろしくお願いします。 /* 文字列として読み込んだ整数を変換して表示 */ #include <stdio.h> #include <stdlib.h> int main(void) { char temp[20]; /* 読込み用文字列 */ printf("整数を入力してください:"); scanf_s("%s", temp); printf("%dと入力しましたね。\n", atoi(temp)); return 0; } エラーメッセージ ハンドルされない例外が 0xFEFEFEFE (helloworld.exe) で発生しました: 0xC00001A5: 無効な例外ハンドラー ルーチンが検出されました。 (パラメーター: 0x00000003)。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.2

scanf_s("%s", temp); を scanf_s("%s", temp,19); にする。 scanf_sは「%sを指定する場合は、入力バッファのポインタと、入力バッファのサイズを引数に指定する」ことになっています。 この1ヶ月で「まったく同様のエラーで質問している投稿」を3回も見ました。 たぶん、お使いの参考書は「scanf_sの使い方を間違って記載している」のでしょう。 もし宜しければ「このサンプルプログラムが掲載されている書籍の名前、著者、出版社名、ISBNコード、掲載ページ」を教えて頂けませんか?

losloson
質問者

お礼

いや、しかし私と同じように悩んでる方がいらっしゃるみたいなので、記載させていただきます。著者 柴田望洋 タイトル 明解C言語 中級編 私の環境はVisual Studioです。 書籍の発行は2015年です。

losloson
質問者

補足

なるほど、サイズを指定しないといけないのですね。 本のタイトルは私の質問のタイトル名でかなり絞れるのでそこからお願いします。

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.4

scanf_s() はマイクロソフトの独自仕様なので、基本的にはWindows系だけで使用できる関数ですね。 汎用的な勉強をしたいのであれば使わない方がいいでしょうね。 Windowsアプリの開発に特化した勉強したいのであれば別ですが。

回答No.3

あと、ちなみに、scanf_s自体はCの仕様には存在しないと思います。 ちと、使用してる処理系の実装依存の話になるんじゃないでしょうか。 (つまり、「C言語」としては使わない方が良いかもしれません)

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

scanf_sのパラメータは3つです。 scanfをscanf_sに単純に変えたのではありません。

関連するQ&A

  • C言語 ポインタ エラー

    文字列を入力後改行して入力した文字列を出力したいのですが、エラーがでます。 ハンドルされない例外が 0xFEFEFEFE (helloworld.exe) で発生しました: 0xC00001A5: 無効な例外ハンドラー ルーチンが検出されました。 (パラメーター: 0x00000003)。 調べてみましたが、理解できません 何卒よろしくお願いします。 #include <stdio.h> void put_string(const char *str) { while (*str) putchar(*str++); } int main(void) { char str[100]; printf("文字列を入力してください"); scanf_s("%s", str); put_string(str); putchar('\n'); return(0); }

  • C言語 コンパイルできるが実行するとエラー

    非負の数字を入力してもらい表示させ、数字以外を入力した場合は終了するプログラムです↓(VC使用) ━━━━━━━━━━━━━━━━━━━━━━━━━━ #include "stdafx.h" #include <stdio.h> #include <stdlib.h> /* atoi使用 */ #include <ctype.h> /* isdigit使用 */ int main(void) {   char cx;   int nx;   printf("非負の整数を入力してください。:");   scanf("%s", cx);   if(isdigit(cx) == 0){     printf("数字を入れてください。\n");   }else{     nx = atoi((const char*) cx);   }   printf("%d", nx);   return 0; } ━━━━━━━━━━━━━━━━━━━━━━━━━━ 実行し文字を入力するとDebug Error!と小窓がでます。どこがおかしいのでしょうか?

  • C言語の [ atoi ] について

    私は、C初心者です。 最近勉強していて 「atoi」というのがよく理解できません。 本を調べると 「文字列を整数に変換する。」 書かれています。 これは、どういう意味でしょうか。 「AAA」という文字列も 「1234」みたいな感じの整数になって しまうということでしょうか。 本の使用例で get(string); i=atoi(string);   とあるのですが printf("%s",i); と付け加えたらやはり 数字で表示されるのでしょうか。 よろしくお願いします。

  • C言語の問題

    選んだファイルのデータを読み取り、そのファイルのデータの中の文字列を数えるプログラム(例えば、「I like sport」 だったら3ワード)を作りたいのですが、文字数を数えるものしかわからないです。 一応、下のプログラムが文字数を数えるものですが、どうすれば文字列を数えるものになりますでしょうか?教えてください。 #include <stdio.h> #include <string.h> #include <stdlib.h> main() { FILE *fin; char filename[20]; char data[256]; int n; printf("ファイル名の入力 :"); gets(filename); fin=fopen(filename,"r"); if(fin == NULL){ printf("%sがオープンできません!\n",filename); exit(1); } while(fgets(data,256,fin) !=NULL){ } n=strlen(data); printf("ファイル %s には、%dワードがあります。\n",filename,n); fclose(fin); }

  • C言語の初歩的な質問

    質問1----------------------------------------- #include<stdio.h> int main() {  int a;  char b[10];  for(int i = 0;i < 2;i++){   scanf("%d",&a);   printf("整数%d\n",a);  }  scanf("%s",b);  printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() {  int *p;  func(&p);  printf("%d",*p); } void func(int **pp) {  int n = 10;  *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。

  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

  • C言語 ファイル操作

    現在書籍にてC言語を用いたファイル操作を勉強しています。 何故か動作が停止してしまい次に進めません、よろしくお願いします。 #include <stdio.h> #pragma warning(disable:4996) int main(void) { FILE *fp; char fname[64]; printf("ファイル名:"); scanf_s("%s", fname); //ポインタfpが指すストリーム fp = fopen(fname, "r"); if (fp == NULL) printf("\aファイルをオープンできません\n"); else fclose(fp); return(0); } エラーメッセージ ハンドルされない例外が 0xFEFEFEFE (helloworld.exe) で発生しました: 0xC00001A5: 無効な例外ハンドラー ルーチンが検出されました。 (パラメーター: 0x00000003)。

  • C言語 無効な例外ハンドラー ルーチン

    失礼します現在C言語を書籍にて勉強しておりますが、エラーが出てしまいすすめません正誤表などがなくこまっています現在のソースは #include <stdio.h> int str_char(const char str[], int c) { int i; for (i = 0; str[i] != '\0'; i++) if (str[i] == c) return (i); return(-1); } int main(void) { int no; char ch[10]; printf("英文字を入力してください"); scanf_s("%s", ch); no = str_char("ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz", ch[0]); if (no >= 0 && no <= 25) printf("それは英大文字の%dです\n", no + 1); else if (no >= 26 && no <= 51) printf("それは英小文字の%dです\n", no - 25); else printf("それは英文字ではありません\n"); return(0); } で、出てくるエラーメッセージは ハンドルされない例外が 0xFEFEFEFE (helloworld.exe) で発生しました: 0xC00001A5: 無効な例外ハンドラー ルーチンが検出されました。 (パラメーター: 0x00000003)。 です。 よろしくお願いします

  • C言語で分からないところがあるのですが・・・

    すみません。C言語で分からないところがあったので来ました。 ユーザから数字を任意の数だけ受け取って、その数字とその和を表示するプログラムです。atoiなる関数、そしてコマンドライン引数というのを使って考えてみた結果を下に書きましたので、どなたか修正してください。お願いします。 実行結果(のイメージ図) 20 39 4 sum 20 39 4 63 途中までのソースコードです。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc,char *argv[]) { int sum; int n,i; printf("How many numbers INPUT?: "); scanf("%d", &n); for(i = 0; i <= n; i++){ atoi(argv[i]); } sum = printf("%d",sum); return 0; }

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

専門家に質問してみよう