文字列


文字列を変数に格納する

これまで変数に値を代入するのは、1文字の定数、整数、浮動小数点のいずれかでした
他言語の経験者は特に不思議に思ったかもしれませんが、文字列を変数に入れられません

ずばり、文字列を代入できる変数のデータ型というのがありませんでした
C言語とはそういう言語なのです

では、文字列を変数として扱いたい場合はどうするのでしょうか
そういえば、半角1文字ならば変数に代入することもできましたね
文字列はこの半角1文字が並んだものですね、並んだ…配列…はいれつぅ!
というわけで、C言語では文字配列として文字列を扱います
#include <stdio.h>

int main()
{
        char str[4];
        int count;

        str[0] = 'R';
        str[1] = 'e';
        str[2] = 'n';
        str[3] = 'a';

        for(count = 0 ; count <= 3 ; count++) printf("%c" , str[count]);

        return 0;
}
str配列変数にそれぞれ1文字づつ代入して、それを1文字づつ出力しています
しかし、これは非常に静的な文字列なので、変数である意味が感じられないですね
そこで以下のように指定することもできます
#include <stdio.h>

int main()
{
        char str[4];
       
        str[0] = 'R';
        str[1] = 'e';
        str[2] = 'n';
        str[3] = 'a';

        printf(str);

        return 0;
}
strだけで添え字を指定しなかった時、文字列(cahr型)配列であれば配列の先頭を指します
配列の先頭とは str[0] のことですね。そしてここから配列の最後までを出力します
出力の時は自動的に文字コードとして扱われます。そのため65という数が代入されていてもそれはAと出力されます

しかし、おそらく上プログラムでは意図した結果は得られないでしょう
Renaという文字列の後に意味のない記号などが出たと思われます
これはC言語の仕様で文字列は 0 で終わるというお約束があります
ここの0のことをヌル文字と呼ばれます
つまり、文字列の終わりに要素を付け足してその内容を0にすればよいのです
#include <stdio.h>

int main()
{
        char str[5];
     
        str[0] = 'R';
        str[1] = 'e';
        str[2] = 'n';
        str[3] = 'a';
        str[4] = 0;

        printf(str);

        return 0;
}
配列の末尾に0という数を付け足すことで、正確に文字列を終了させることができます
printf()やscanf()関数の書式設定を使う場合は%sを用います
%sはprintf関数などの書式設定でヌル文字までの文字列の出力を表します
#include <stdio.h>

int main()
{
        char str[128];

        printf("文字列を入力してください(127文字以内)\n");
        scanf("%s",str);

        printf("■入力された文字列■\n%s" , str);

        return 0;
}
メモリに割り当てられている配列は128までなので、それ以上の文字を代入することはできません
このようにscanf()関数を用いて文字列を配列に格納することができますが
gets()関数という文字列入力専用関数が存在します
ただしgets()関数やscanf()関数の入力は、配列のサイズを超えて入力された場合強制終了されます
セキュリティなどを考慮した本格的なプログラムでは、実用的ではありません
#include <stdio.h>

int main()
{
        char str[10];

        printf("文字列を入力してください(9文字以内)\n");
        gets(str);

        printf("■入力された文字列■\n%s" , str);

        return 0;
}


char *gets(char *buf)

【ヘッダ】stdio.h
【戻り値】成功時はbuf、ファイルの終わりやエラーを検出した場合はNULL
標準入力から1行の文字列を読み出します

buf 文字列を格納するバッファのポインタを指定します

Enterキーで改行されると文字列をバッファに格納します
改行はヌル文字に置換えられます
バッファよりも長い文字列を読み込んだ場合の動作は保証されません



前のページへ戻る次のページへ