文字型を文字列に変換【chat → char*】

文字型から文字列配列や文字列ポインタに変換する方法です。

文字列配列への変換

char c = 'a';
char a[] = {c, '\0'};
printf("%s", a); // "a"

配列型の自動変数を活用した方法です。変換した文字列は配列変数の生存期間を意識して慎重に利用する必要があります。

自動変数の寿命は、その変数が宣言されたスコープ内となっています。スコープを抜けると変数の値及び変数への参照は不定な物となります。

文字列ポインタへの変換

変換した文字列を長期間保持したいような場合はmallocによるメモリの動的確保が必要になります。

char c = 'a';
char *s = malloc(2 * sizeof(char));
s[0] = c;
s[1] = '\0';
printf("%s", s); // "a"

free(s); // 任意のタイミングで解放する

変換関数(配列版)

char *ctoa(char c, char s[2]) {
  s[0] = c;
  s[1] = '\0';
  return s;
}
char s[2];
puts(ctoa('A', s)); // "A"

変換関数(ポインタ版)

char *ctoa(char c) {
  char *s = malloc(2 * sizeof(char));
  s[0] = c;
  s[1] = '\0';
  return s;
}
char *s = ctoa('A');
puts(s); // "A"
free(s); // 手動で解放する必要がある

変換関数(非スレッドセーフ版)

マルチスレッドには対応出来ませんが、以下のような変換関数を自作することも可能です。

char *ctoa(char c) {
  static char str[] = {'\0', '\0'};
  str[0] = c;
  return str;
}
puts(ctoa('A')); // "A"
広告