c言語では、配列のサイズを超えて文字列が入力されるような状況でも、基本的にコンパイルエラーは起きないので注意する。
文字列操作
文字列の操作に関する型や関数のヘッダーファイル。
#include <stdio.h> #include <string.h> int main(void) { char str_1[256]; char str_2[256]; char str_3[512]; unsigned long len; printf("str_1:"); scanf("%s", str_1); printf("str_2:"); scanf("%s", str_2); // コピー printf("copy str_1 to str_3...\n"); strcpy(str_3, str_1); printf("str_3: %s\n", str_3); // 結合 printf("concatinate str_3 and str_2...\n"); strcat(str_3, str_2); printf("str_3: %s\n", str_3); // 文字数 len = strlen(str_3); printf("length of str_3: %lu\n", len); // 文字列の比較 if (strcmp(str_1, str_2) == 0) { printf("str_1 is equal to str_2.\n"); } else { printf("str_1 is not equal to str_2.\n"); } return 0; }
c言語では、文字列を比較するとポインタの比較になるので、例えば ==
で同じ文字列かどうかの比較はできない。strcmp
関数を使う。
文字列と数値
atoi
atof
の a
はascii
。
sprintf(s, format, a)
は、a
をformat
の書式文字列に従って、s
が指す文字配列へ書き込む。
#include <stdio.h> #include <stdlib.h> int main(void) { char s1[256] = "12345"; char s2[256] = "1.23456789"; int num1; double num2; // 文字列を数値に変換 num1 = atoi(s1); num2 = atof(s2); printf("s1:%s num1:%d\n", s1, num1); printf("s2:%s num2:%lf\n", s2, num2); puts("bring num1 to s2 and num2 to s1..."); // 数値を文字列に変換 sprintf(s2, "%d", num1); sprintf(s1, "%lf", num2); printf("s1:%s num1:%d\n", s1, num1); printf("s2:%s num2:%lf\n", s2, num2); return 0; }