ページ 11

scanfでエラー

Posted: 2014年9月15日(月) 12:17
by 太郎
お世話になります。
下記ソースの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);
}


Re: scanfでエラー

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

コード:

char* a;
scanf("%s", a);
というコードと違って、(入力された文字列が十分短ければ)ランタイムエラーにはならないと思います。

Re: scanfでエラー

Posted: 2014年9月15日(月) 12:29
by みけCAT
太郎 さんが書きました:下記ソースのinput_name内のscanf_s辺りで、実行時にエラーが出るのですが、
理由と解決策がわかりません。
CodeforcesのCustom Testで実行してみましたが、エラーは出ませんでした。
お使いの実行環境(OSやコンパイラなど)とテストに使用した入力を教えていただけますか?

Re: scanfでエラー

Posted: 2014年9月15日(月) 12:44
by 太郎
みけCATさん
ご指摘ありがとうございます。
scanf_sにサイズ指定を追加したらエラーは出なくなりました。

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

Re: scanfでエラー

Posted: 2014年9月15日(月) 12:47
by 太郎
お世話になります。
入力値は適当に "a" と入れただけです。