プロが教えるわが家の防犯対策術!

C言語の勉強をしている者です。エラーが解消されなくて困っています。差し支えなければ、どなたかエラーの解消方法を教えていただけませんか。
環境は、Visual Studio2017,Windows 10です。


(問題)
キーボードから2つの字列を入力し、その2つを結合した文字列を表示するプログラムを作成しなさい。ただし、最終的に出力する文字列は、strcpy()および、strcat()関数を用いて、2つの文字列を1つに統合したものにすること。

(期待される実行結果)
文字列1:ABC ← キーボードから入力
文字列2:DEF ← キーボードから入力
結合した結果:
ABCDEF

(私が作成したプログラム)
#include<stdio.h>
#include<string.h>

void main() {
char s1[10],s2[10],ans[10];
printf("文字列:");
scanf_s("%s", &s1);
printf("文字列:");
scanf_s("%s", &s2);
strcpy(ans, s1);
strcat(ans, s2);
printf("結合した結果:\n%s", ans);
}

(エラー、実行結果)
1>------ ビルド開始: プロジェクト: Project16, 構成: Debug Win32 ------
1>probex5-1.c
1>c:\users\watan\source\repos\project16\probex5-1.c(7): warning C4473: 'scanf_s': 書式文字列として渡された引数が不足しています
1>c:\users\watan\source\repos\project16\probex5-1.c(7): note: プレースホルダーとそのパラメーターには 2 の可変個引数が必要ですが、1 が指定されています。
1>c:\users\watan\source\repos\project16\probex5-1.c(7): note: 不足している可変個引数 2 が書式文字列 '%s' に必要です
1>c:\users\watan\source\repos\project16\probex5-1.c(7): note: この引数はバッファー サイズとして使用されます
1>c:\users\watan\source\repos\project16\probex5-1.c(9): warning C4473: 'scanf_s': 書式文字列として渡された引数が不足しています
1>c:\users\watan\source\repos\project16\probex5-1.c(9): note: プレースホルダーとそのパラメーターには 2 の可変個引数が必要ですが、1 が指定されています。
1>c:\users\watan\source\repos\project16\probex5-1.c(9): note: 不足している可変個引数 2 が書式文字列 '%s' に必要です
1>c:\users\watan\source\repos\project16\probex5-1.c(9): note: この引数はバッファー サイズとして使用されます
1>c:\users\watan\source\repos\project16\probex5-1.c(10): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>c:\program files (x86)\windows kits\10\include\10.0.16299.0\ucrt\string.h(136): note: 'strcpy' の宣言を確認してください
1>c:\users\watan\source\repos\project16\probex5-1.c(11): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>c:\program files (x86)\windows kits\10\include\10.0.16299.0\ucrt\string.h(93): note: 'strcat' の宣言を確認してください
1>プロジェクト "Project16.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

A 回答 (2件)

scanf_s は、scanfとは使い方が違います。


scanf_s を使うなら、引数もそれに合わせてください。
または、 scanf を使ってください。

詳しくは
error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
とある通りです。
error C4996 で検索するとよいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます、助かりました。

お礼日時:2017/11/28 22:01

エラーメッセージのとおりです。


scanf_s()で文字列を扱う際は第三引数が必要です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!