【初心者向け】C言語の文字列入出力の基本をサンプルコード付きで解説
文字列とは、文字の配列(文字の集合)のことを指します。C言語では、char型の配列として文字列を扱い、末尾にヌル文字「\0」が自動的に付加されることで、一つの文字列として認識されます。
文字列の入出力とは
C言語で文字列を扱う際は、scanf関数やgets関数を使ってキーボードから文字列を入力し、printf関数やputs関数を使って画面に表示します。それぞれの使い方と特徴の違いを見ていきましょう。
scanf関数を使った文字列の入出力
以下は、scanf関数を使用して文字列を入力・出力するCプログラムの例です。
#include<stdio.h>
main ( ){
char a[30];
printf("enter your name");
scanf ( "%s",a);
printf ("your name is %s",a);
getch ( );
}
実行結果
上記のプログラムを実行すると、次のような結果が出力されます。
1. Enter your name : Lucky 2. Enter your name : Lucky Lol Your name is Lucky Your name is Lucky
2つ目の入力でスペースを含む「Lucky Lol」と入力しても、「Lucky」までしか表示されていない点に注目してください。
scanf関数使用時の注意点
文字列を受け取る際に「&」は不要です。配列名自体が文字列の先頭アドレス(ベースアドレス)を表しているためです。
scanf関数は空白文字(スペース)を文字として受け付けません。スペース以降に入力された文字列は切り捨てられます。
文字列の末尾には、コンパイラによって自動的にヌル文字「\0」が挿入されます。
gets関数・puts関数を使った文字列の入出力
次に、gets関数で文字列を読み込み、puts関数で出力するCプログラムの例を紹介します。
#include<stdio.h>
main ( ){
char a[30];
printf ( "enter your name");
gets (a);
printf("Your name is");
puts (a);
}
実行結果
上記のプログラムを実行すると、次のような結果が出力されます。
1. Enter your Name : Lucky 2) Enter your name : Lucky Lol Your name is Lucky Your name is Lucky Lol
注意:gets関数はスペースも1文字として受け付けるため、scanf関数と異なり、スペースを含む文字列をそのまま読み込むことができます。
まとめ:scanfとgetsの違い
C言語における文字列の入出力では、scanf関数はスペースを含む文字列を正しく扱えない一方、gets関数はスペースを含む文字列も問題なく読み込めるという違いがあります。
ただし、gets関数にはバッファオーバーフローを引き起こす危険性があるため、現在のC規格(C11以降)では廃止されています。実務での開発では、fgets関数などより安全な代替手段を使用することが推奨されます。
-
C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例
探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探
-
サイファーパンクとは何者?その歴史と主張を徹底解説
暗号資産(仮想通貨)がニュースを賑わせる昨今、再び脚光を浴びているのが「サイファーパンク」と呼ばれるコミュニティです。ブロックチェーン技術の利用拡大に伴い、自らをサイファーパンクと称する人々は世界中で急速に増えており、政府や法執行機関にとっても無視できない存在となりつつあります。 では、サイファーパンクとは一体どんな人たちで、どこから来て、何を求めているのでしょうか。 サイファーパンクとは?その歴史 サイファーパンク運動には明確な「誕生日」はありませんが、その起源は1970年代半ばにさかのぼります。米国政府によるデータ暗号化標準(DES)の公表、そしてマーティン・ヘルマンとホイットフィールド・