独学C言語 独学C言語 初級

2024年版 C言語・初級レベル ~文字列~

文字列を扱ってみましょう。

文字列はchar型の配列です。Windowsでは、シフトJISの文字列が入ります。

一般的な文字列

#include <stdio.h>

void main(void) {

    unsigned char str[] = "abcde";

    printf( str );
}

実行結果

abcde

strには、"abcde\0"が配列として代入されています。

サイズは6バイトです。最後のNULL文字も含まれてます。

文字列 別の書き方

このように書いても同じことです。

#include <stdio.h>

void main(void) {

    unsigned char str[6];

    str[0] = 'a';
    str[1] = 'b';
    str[2] = 'c';
    str[3] = 'd';
    str[4] = 'e';
    str[5] = '\0';
    printf( str );
}

実行結果

abcde

char str[6] と配列の要素を6としています。

それ以上の長さでも構いません。 初期化されないのでゴミが入っている可能性はあります。

少ない場合は最後のNULL文字がないのでどういう動きになるかは不明確です。

文字列の操作

文字列のコピー

標準関数

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

void main(void) {
    unsigned char str1[] = "C言語は難しい";
    unsigned char str2[128];
    int cnt;

    strcpy(str2, str1);
    printf("str2 %s\n", str2 );
}

実行結果

C言語は難しい

str1 の文字列を str2 に標準関数を使ってコピーしています。

str1 のNULL文字が来るまでコピーしています。

それ以外の方法としていくつかあります。

while文 を使う

#include <stdio.h>

void main(void) {
    unsigned char str1[] = "C言語は難しい";
    unsigned char str2[128];
    int cnt;

    cnt = 0;
    while( str1[cnt] != NULL ) {
        str2[cnt] = str1[cnt];
        cnt++;
    }
    str2[cnt] = NULL;
    printf("str2 %s\n", str2);
}

実行結果

C言語は難しい

for文 を使う

#include <stdio.h>

void main(void) {
    unsigned char str1[] = "C言語は難しい";
    unsigned char str2[128];
    int cnt;

    for ( cnt = 0 ; str1[cnt] != NULL ; ++cnt ) 
        str2[cnt] = str1[cnt];
    str2[cnt] = NULL;
    printf("str2 %s\n", str2);}
}

実行結果

C言語は難しい

文字列の長さ

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

void main(void) {
    unsigned char str[] = "abcde";

    printf("str length %d\n", strlen(str));
}

実行結果

str length 5

文字列操作には、長さを求める関数 strlen があります。

文字列からNULLが検出されるまでの長さを返します。

文字列の結合

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

void main(void) {
    unsigned char str[128];
    unsigned char str1[] = "abcde";
    unsigned char str2[] = "ABCDE";

    strcat(str, str1);
    strcat(str, str2);
    printf("%s\n", str);
}

実行結果

abcdeABCDE

2つの文字列を連結する場合に使用する関数です。

コピー元文字列のNULLが検出されるまでをコピーします。

-独学C言語, 独学C言語 初級