文字列に関しての記事です。
文字列の仕組みやstrcpy_s()関数について解説しています。
文字列とは?
文字列とは、文字の集まりのことです。
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』をキーボードで入力しています。
