苗字と名前を入力して表示したいです

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

苗字と名前を入力して表示したいです

#1

投稿記事 by kenty » 2ヶ月前

C言語を学習し始めて1か月ほどです。ポインタや構造体などはまだ学習していません。
まず苗字と名前の配列を用意し、苗字と名前を入力して、その二つの配列を連結する形でフルネームを表示する
プログラムを組みたいです。
現状以下のプログラムだと入力はできますが、表示がされません。
個人的に一番気になるのはstrcat_sで、いまいち使い方がよくわかっていません。
参考文献として苦Cを利用しており、以下のページの文字列の連結を参考にしています。
https://9cguide.appspot.com/14-03.html#S3

開発環境はVisualStudio Community 2019
Version 16.1.14
Windows 10 64bit バージョン1903です。

急ぎではないのでわかりやすくご教授いただければ幸いです。よろしくお願い致します。

コード:

#include <stdio.h>
#include<string.h>

int main(void) {
	char fname[256]; //first name
	char lname[256]; //last name

	printf("苗字を入力してください:");
	scanf_s("%6s", fname,9);  //%6sは6文字以上入力した場合のエラーを防ぐため
	printf("名前を入力してください:");
	scanf_s("%6s", lname,9);

	strcat_s(fname, lname,18);

	printf("フルネームは%sです\n",fname);
	/*日本語は1文字3bite*/
	return 0;
}

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

Re: 苗字と名前を入力して表示したいです

#2

投稿記事 by みけCAT » 2ヶ月前

使い方がわからないなら、わかろうとしましょう。
「strcat_s」でググってみましたか?
手元でググってみると、2番目に以下のページが出てきました。

strcat_s、wcscat_s、_mbscat_s、_mbscat_s_l | Microsoft Docs

このページによると、strcat_s関数は、
第1引数に書き換え対象のバッファへのポインタ、
第2引数に書き換え対象のバッファのサイズ、
第3引数に追加する文字列へのポインタを渡す仕様になっています。

kentyさんのコードでは、strcat_s関数の第2引数と第3引数を逆にしてしまっているため、
無効な場所から追加する文字列を読みだそうとしてしまい、強制終了する可能性が高いと考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kenty

Re: 苗字と名前を入力して表示したいです

#3

投稿記事 by kenty » 2ヶ月前

なるほど、引数の位置が逆になってたのですね。
助かりました。ありがとうございます。

返信

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