PR

【C・C++】文字列とは?【仕組み・キーボード入力・strcpy_s】

アイキャッチ C++
この記事は約5分で読めます。

文字列に関しての記事です。
文字列の仕組みやstrcpy_s()関数について解説しています。

のんびり丸

WEBアプリの開発等をしています。
日々の学習の備忘録として運営していこうと思います。

のんびり丸をフォローする

文字列とは?

文字列とは、文字の集まりのことです。
C++においては、配列で表されます。

文字列の仕組み

文字列の最後には、NULL文字【\0】が必要になってきます。
NULL文字【\0】は、画面には表示されません。

『Hello』という文字列を例に出すと、{H,e,l,l,o,\0}のように文字数+1個分の入れ物が必要になります。

コーディング例①

#include <stdio.h> // printf()を使用するために必要

int main()
{
	char a[6] = "Hello";
	char b[] = "こんにちは"; // 文字数+1の配列を自動的に用意
	printf("%s\n", a);
	printf("%s\n", b);

	return 0;
}
出力
Hello
こんにちは

b[] = "こんにちは"のように、[]の中身を省略すると、文字数+1の配列を自動的に用意してくれます。

コーディング例②

ちなみに、日本語【全角】の場合は、1文字で2文字【2バイト】の容量が必要となります。
カタカナの場合は、半角にすることで、1バイトの容量で表現できます。

#include <stdio.h> // printf()を使用するために必要

int main()
{
	char a[6] = "コンニチハ";
	printf("%s\n", a);

	return 0;
}
出力
コンニチハ

ひらがな・漢字の場合は、半角が存在しないので、必ず2バイト分が必要となります。

strcpy_s()

文字列の変数に値を代入する場合、【=】が利用できるのは初期化時のみです。
それ以外のケースでは、strcpy_s()を利用します。

strcpy_s(代入先, 配列の大きさ, 値)

コーディング例①

#include <stdio.h> // printf()を使用するために必要
#include <string.h> // strcpy_s()を使用するために必要

int main()
{
	char a[] = "こんにちは"; // 文字数+1の配列を自動的に用意
	char b[12];
	char c[11];
	strcpy_s(b, 12, "Nonbirimaru");
	strcpy_s(c, 11, a);
	printf("%s\n", a);
	printf("%s\n", b);
	printf("%s\n", c);

	return 0;
}
出力
こんにちは
Nonbirimaru
こんにちは

strcpy()を使うと

C++を勉強する前にC言語を勉強していると、strcpy()を使うと書かれていました。
しかし、Visual Studioでは、strcpy()を使うと『代わりにstrcpy_s()を使え』というエラーが発生します。

理由としては、strcpy()では安全性に難があるからのようです。
使い方は、strcpy(a, b)だったものを、strcpy_s(a, 配列の大きさ, b)と書くだけです。

キーボード入力

scanf_s()

scanf_s()は、キーボード入力したデータを、指定した書式で変数・配列に格納する関数です。

scanf_s(書式指定, 格納先アドレス); // 数値
scanf_s(書式指定, 格納先アドレス, 文字列の最大長); // 文字列

コーディング例①

#include <stdio.h> // printfを使用するために必要

int main()
{
	int a;
	char b[10];
	scanf_s("%d", &a);
	scanf_s("%s", b, 10);
	printf("%d\n", a);
	printf("%s\n", b);

	return 0;
}
出力
5
abcde
5
abcde

上記の例では、『5』と『abcde』をキーボードで入力しています。

gets_s()

gets_s()は、キーボード入力した1行分の文字列を配列に格納する関数です。

gets_s(格納先のポインタ, 第一引数のサイズ);

コーディング例①

#include <stdio.h> // printfを使用するために必要

int main()
{
	char b[10];
	gets_s(b, sizeof(b));
	printf("%s\n", b);

	return 0;
}
出力
abcde
abcde

上記の例では、『abcde』をキーボードで入力しています。

getchar()

getchar()は、キーボード入力した文字の1文字目を変数に格納する関数です。

コーディング例①

#include <stdio.h> // printfを使用するために必要

int main()
{
	char a;
	a = getchar();
	printf("%c\n", a);

	return 0;
}
出力
ABCDE
A

上記の例では、『ABCDE』をキーボードで入力しています。

タイトルとURLをコピーしました