scanfでエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
太郎

scanfでエラー

#1

投稿記事 by 太郎 » 11年前

お世話になります。
下記ソースのinput_name内のscanf_s辺りで、実行時にエラーが出るのですが、
理由と解決策がわかりません。

コード:


#include <stdio.h>

/* 主人公のステータス*/
typedef struct kouzoutai{
	char name[256];
	int age;
	char serifu[256];
}test;

void input_name(test *temp);

int main(void)
{
	char* a;
	test hero = {"aaa",10,"test"};

	/* 名前入力 */ 
	input_name(&hero);
//	scanf_s("%s\n",hero.name);

	/* 終了*/
	scanf_s("%s",&a);

	return 0;
}

/* 名前入力 */
void input_name(test *temp)
{
	printf("名前をいれて\n");
	/* 入力フォーム*/
	scanf_s("%s\n",temp->name);
}


アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: scanfでエラー

#2

投稿記事 by みけCAT » 11年前

・scanf_sで文字列を読み込む際は、領域の指定の後にそのサイズの指定が必要らしいです。
・ポインタを格納する領域に文字列を格納することは、あまりいいことではありません。
オフトピック
しかし、4~8バイト程度の領域が確保されているので、

コード:

char* a;
scanf("%s", a);
というコードと違って、(入力された文字列が十分短ければ)ランタイムエラーにはならないと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: scanfでエラー

#3

投稿記事 by みけCAT » 11年前

太郎 さんが書きました:下記ソースのinput_name内のscanf_s辺りで、実行時にエラーが出るのですが、
理由と解決策がわかりません。
CodeforcesのCustom Testで実行してみましたが、エラーは出ませんでした。
お使いの実行環境(OSやコンパイラなど)とテストに使用した入力を教えていただけますか?
添付ファイル
scanf_s_test20140915.png
テスト結果
scanf_s_test20140915.png (30.95 KiB) 閲覧数: 1994 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

太郎

Re: scanfでエラー

#4

投稿記事 by 太郎 » 11年前

みけCATさん
ご指摘ありがとうございます。
scanf_sにサイズ指定を追加したらエラーは出なくなりました。

実行環境は、
OS:Windows7Professional ServicePack1
統合開発環境:VisualC++ 2010 Express
です。

太郎

Re: scanfでエラー

#5

投稿記事 by 太郎 » 11年前

お世話になります。
入力値は適当に "a" と入れただけです。

閉鎖

“C言語何でも質問掲示板” へ戻る