文字列
- 文字変数(char型)の配列を作る。
- 文字列の終端(EOS):'\0'=0
- &をつけずにアドレスを表現できる
char str[6]; なら、str でOK
char str[6];
初期化+代入
char str[6] = { 'A', 'B', 'C', 'D', 'E', '\0' }; printf("%s\n", str);
char str[] = "ABCDE"; ←初期化時のみできる書き方 printf("%s\n", str);
表示イメージ
ABCDE
文字列処理関数
数字変換
変数 = atoi(文字配列名);
char str[] = "123"; int A = atoi(str); printf("%d\n", A);
表示イメージ
123
文字列のコピー
文字列全コピー
strcpy(コピー先文字配列名, コピー元文字配列名);
char str[10]; strcpy(str, "ABCDE"); printf("%s\n", str);
表示イメージ
ABCDE
文字列の部分コピー
strncpy(コピー先文字配列名, コピー元文字配列名, コピーする文字数);
注意:コピー後、文字列最後の後にEOS('\0')を代入
char str1[] = "ABCDE", str2[10]; strncpy(str2, str1, 3); str2[3] = '\0'; printf("%s\n", str2);
表示イメージ
ABC
文字列の連結
strcat(元の文字列が記憶された配列, 追加する文字列の記憶された配列);注意:コピー先のサイズが足りないとバッファーオーバーラン。
char str1[12] = "ABCDE"; char str2[] = "abcde"; strcat(str1, str2); printf("%s\n", str1);
表示イメージ
ABCDEabcde
文字列合成
sprintf(収納先配列, 書式, 文字配列名1[, 文字配列名2…]);char str[20]; char str1[12] = "ABCDE"; char str2[] = "abcde"; int i = 123; sprintf(str, "%s%s%d\n", str1, str2, i); printf(str);
表示イメージ
ABCDEabcde123
文字数を数える
文字数 = strlen(文字配列);int kazu; char str[20] = "ABCDE";; kazu = strlen(str); printf("%d\n", kazu);
表示イメージ
5
文字列の比較…同じ文字列か?
変数 = strcmp(文字配列1, 文字配列2);※先頭文字列から比較し、文字コードが
- 全部 文字配列1 = 文字配列2 なら 0
- 文字配列1 > 文字配列2 なら 1
- 文字配列1 < 文字配列2 なら -1
char str1[] = "ABCDE"; char str2[] = "ABCDE"; char str3[] = "ABCDZ"; char str4[] = "ABCDA"; if (strcmp(str1, str2) == 0) { printf("同じ\n"); } else { printf("違う\n"); } if (strcmp(str1, str3) == 0) { printf("同じ\n"); } else { printf("違う\n"); } printf("%d\n",strcmp(str1, str2)); printf("%d\n",strcmp(str1, str3)); printf("%d\n",strcmp(str1, str4));
表示イメージ
同じ ←"ABCDE" = "ABCDE"
違う ←"ABCDE" < "ABCDZ";
0 ←"ABCDE" = "ABCDE"
-1 ←"ABCDE" < "ABCDZ";
1 ←"ABCDE" > "ABCDA"
違う ←"ABCDE" < "ABCDZ";
0 ←"ABCDE" = "ABCDE"
-1 ←"ABCDE" < "ABCDZ";
1 ←"ABCDE" > "ABCDA"