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