C言語のsprintf関数とsscanf関数の使い方をわかりやすく解説
C言語の標準入出力ライブラリ(stdio.h)には、文字列と各種データを相互に変換するための便利な関数が用意されています。本記事では、文字列からデータを読み込む「sscanf関数」と、文字列へデータを書き込む「sprintf関数」について、構文と具体的なサンプルコードを交えながら解説します。
sscanf関数とは
sscanf関数は、文字列からデータを読み取り、指定した書式に従って変数へ格納する関数です。キーボード入力を受け付けるscanf関数とよく似ていますが、入力元が標準入力ではなく文字列である点が異なります。
構文
sscanf(文字列, 書式指定子, &var1, &var2, ......)
- 文字列:読み込み元となるchar型の文字列です。
- 書式指定子:読み込み時の変換形式を指定する文字列です。
- var1、var2:読み込んだデータを格納する変数です(&でアドレスを渡します)。
たとえば sscanf(string,"%d%d",&hours,&minutes); のように書くと、文字列から整数値を順番に読み取ることができます。
sscanf関数の使用例
#include<stdio.h>
int main(){
char instring[]="Tutorials Point";
char outstring[50],string1[10],string2[10];
sscanf(instring,"%s %s",string1,string2);
printf("%s\n",string1);
printf("%s",instring);
return 0;
}
実行結果
Tutorials Tutorials Point
この例では、「Tutorials Point」という文字列を空白区切りで分解し、最初の単語「Tutorials」だけをstring1に格納しています。このように、sscanf関数は文字列の解析や特定部分の抽出に活用できます。
sprintf関数とは
sprintf関数は、printf関数と同じ書式指定を使いながら、結果を画面ではなく文字配列(バッファ)へ書き込む関数です。数値などのデータを整形して、ひとつの文字列として組み立てたい場合にとても便利です。
構文
sprintf(文字列, 書式指定子, var1, var2, ......);
- 文字列:書き込み先となるchar型の配列です。
- 書式指定子:書き込み時の変換形式を指定する文字列です。
- var1、var2:埋め込む個々のデータ項目です。
sprintf関数の使用例
#include <stdio.h>
int main(){
char value[50];
int p = 20, q = 30, r;
r = p + q;
sprintf(value, "adding two numbers %d and %d the result is %d", p, q, r);
printf("%s", value);
return 0;
}
実行結果
adding two numbers 20 and 30 the result is 50
この例では、計算結果を含んだ文章を1つの文字列として生成しています。ほかにも、次のように数式の評価結果を直接埋め込むことも可能です。
sprintf(value, "cube of two is %d and square of two is %d\n", 2*2*2, 2*2); /* value = "cube of two is 8 and square of two is 4" */
sscanfとsprintfの違いまとめ
| 関数名 | データの流れ | 主な用途 |
|---|---|---|
| sscanf | 文字列 → 変数 | 文字列からデータを読み取り・解析する |
| sprintf | 変数 → 文字列 | データを整形して新しい文字列を作成する |
このように、sscanf関数とsprintf関数は互いに対になる関係にあり、それぞれ「読み取り」と「書き込み」を担います。使用する書式指定子(%d、%s、%fなど)はprintf・scanf系の関数と共通なので、一度覚えてしまえばどちらの関数でも同じ感覚で活用できるでしょう。
-
【C言語】putw()関数とgetw()関数の使い方をわかりやすく解説
ファイルとは、レコードの集合体であり、データを永続的に保存しておくためのハードディスク上の場所のことです。C言語ではファイルを利用することで、プログラムの実行が終了しても失われないデータを扱えます。ファイルに対する主な操作C言語におけるファイル操作は、基本的に以下の手順で行います。ファイル名を指定する(命名)ファイルを開くファイルから読み込むファイルに書き込むファイルを閉じる基本構文まず、ファイルを扱うためのファイルポインタを宣言します。FILE *ファイルポインタ;宣言例:FILE *fptr;続いて、fopen()関数を使ってファイルを開きます。ファイルポインタ = fopen(ファイル名
-
文字列とは何か?C言語での文字列の宣言と初期化方法を徹底解説
C言語における文字列(string)とは、複数の文字を並べた「文字の配列」、すなわち文字の集合体のことです。C言語には文字列型という専用のデータ型が存在しないため、char型の配列として文字列を扱います。 文字列の宣言 文字列は、以下の形式で宣言します。 char 文字列名 [サイズ]; たとえば char a[50]; と記述すると、最大50文字まで格納できる文字列が定義されます。なお、終端を表すヌル文字(\0)のぶんも領域が必要なため、実際に格納できるのは「サイズ − 1」文字である点に注意しましょう。 文字列の初期化 文字列の初期化には、主に次の2つの方法があります。 1. 単一文