文字列データの入出力

文字列から書式付きで取得

sscanf.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
  stdio.h [sscanf]

  書式: int sscanf(const char *s, const char *format, ...)
  機能: 文字列から書式付きで, データを取得する
  引数: const char *s: 入力元となる文字列
        const char *format: 書式文字列
	...: 可変個引数で書式で指定された変数をカンマ区切りで指定
  戻り値: 成功すると, 入力項目数を返し,
          失敗すると, EOF(-1) を返す.
*/

#include <stdio.h>

int main(void){
  char *src = "10 A0 123.456 ABCDEFG";
  int i;
  int x;
  float f;
  char s[100];

  sscanf(src, "%d %X %f %s", &i, &x, &f, s);
  
  printf("%d\n", i);
  printf("%X\n", x);
  printf("%.3f\n", f);
  printf("%s\n", s);

  return 0;
}

sscanf.c の実行結果は:

[cactus:~/code_c/refer]% ./sscanf
10
A0
123.456
ABCDEFG

文字列へ書式付きで出力

sprintf.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
  stdio.h [sprintf]

  書式: int sprintf(char *s, const char *format, ...)
  機能: 文字列に書式付きで出力
  引数: char *s: 出力する文字列の格納
        const char *format: 書式文字列
	...: 可変個引数. 書式で指定された変数をカンマ区切りで指定
  戻り値: 出力したバイト数 (文末の \0 は含まない) を返す
*/

#include <stdio.h>

int main(void){
  int i = 123;
  char s[10];

  printf("16 進数で表示\n");
  printf("i = %#x\n", i); /* 0x7b */
  sprintf(s, "i = %#x\n", i); /* 0x7b */
  puts(s);

  return 0;
}

sprint.c の実行結果は:

[cactus:~/code_c/refer]% ./sprintf
16 進数で表示
i = 0x7b
i = 0x7b

可変個引数を書式付きで出力

vsprintf.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
  stdio.h [vsprintf]

  書式: int vsprintf(char *s, const char *format, va_list *arg)
  機能: 可変個引数リストを書式付きで文字列に出力
  引数: char *s: 出力を格納するためのバッファ
        const char *format: 書式文字列
	va_list arg: 可変個引数リスト
  戻り値: 成功すると, 出力バイト数を返し,
          失敗すると, 負値を返す.
*/

#include <stdio.h>
#include <stdarg.h> /* va_list */

void func(int num, ...);

int main(void){
  func(5, 'a', 0.123, 10, 123, "ABC");

  return 0;
}

void func(int num, ...){
  va_list arg;
  char s[100];

  /* 可変個引数リスト初期化 */
  va_start(arg, num);

  /* 可変個の引数を取り出し */
  vsprintf(s, "%c, %0.3f, %d, %#x, %s", arg);

  /* 文字列を画面へ出力 */
  puts(s);

  /* 可変個引数リストを終了 */
  va_end(arg);
}

vsprintf.c の実行結果は:

[cactus:~/code_c/refer]% ./vsprintf
a, 0.123, 10, 0x7b, ABC