TPY ENGINEERING VLOG

TPY ENGINEERING VLOG(C,JAVA)

*C言語* 〜37時限目〜 文字列を比較する・・・

〜目次〜

 

 

 

文字列を比較する

文字列を比較することができる、

strcmp( )関数

という関数を使ったコードを入力してみます。

この関数は、引数として2つの文字列が渡されると、

文字列1と文字列2を比較して、

一致していた場合は0を戻り値として返します。

実際に以下のコードで確認してみます。

sample84.c

f:id:YuyaTerayama:20180912021725p:plainーsample84の実行画面その1ー

1番目の文字列を入力してください。

Hello

2番目の文字列を入力してください。

Hello

2つの文字列は同じです。

ーsample84の実行画面その2ー

1番目の文字列を入力してください。

Hello

2番目の文字列を入力してください。

hello

2つの文字列は異なります。

一致しているか、していないかを調べることができています。

if文と組み合わせることで、

比較をして結果を出力するプログラムを作成することができました。

 

文字列の長さを実行時に決める

いままでのプログラムでは、

文字列を格納する配列の大きさは、

プログラムを実行する前に決まっていました。

しかし、

いつでも配列を大きく取っておくと、

文字列が短い場合などでは、

メモリの無駄使いになってしまいます。

このようなときに、

プログラムの実行時に必要なだけ、

メモリを確保できると便利です。

このとき使うのが、

malloc( )関数

free( )関数

という標準ライブラリ関数です。

malloc( )関数は、

プログラムを実行したときに必要なサイズのメモリを確保し、

その場所のアドレスを返します。

確保したメモリは、

使い終わったらfree( )関数で解放します。

この2つの関数は、ヘッダファイルの

stdlib.h

をインクルードする必要があります。

実際に2つの関数を使ってコードを入力してみます。

sample85.c

f:id:YuyaTerayama:20180912023147p:plain

ーsample85の実行画面ー

何文字のaを用意しますか?

10

aaaaaaaaaaを用意しました。

12行目で確保されたメモリの場所をあらわすポインタが得られます。

(num+1)で指定された数+1個分の、

char型のサイズ分のメモリを確保します。

このコードでは、文字列を扱うために、

「char型サイズ×(実行時に指定された文字列の長さ+1)」だけの、

メモリをmalloc( )関数によって確保しています。

最後に1を足しているのは、¥0を格納するためです。

また、実行時にメモリが確保できなかった場合に備えて、

エラー処理を行なっています。

メモリが確保できた場合には、

その場所へのポインタを使って「aaaa....」という、

文字列を格納し、出力するようにしています。

このようにすることで、

文字列に必要なだけのメモリを使うようにすることができます。

ただし、

このメモリは使い終わったら必ず、

free( )関数を使ってメモリの解放をする必要があります。

解放するコードを忘れてしまうと、

プログラムを実行するたびに、

使えるメモリが減ってしまいます。

 

動的なメモリの確保

変数や配列の寿命について思い出してください。

関数の開始・終了時に確保・解放される静的変数を学びました。

今回出てきた、

malloc( )関数、free( )関数は、

このようなタイミングをプログラムの処理が行われる際に、

行うものです。

この方法では、上記のようにポインタを使って値を扱う必要があります。

このメモリの確保の仕方は

動的なメモリ確保

と呼びます。

このメモリは、ヒープ領域と呼ばれる場所に確保されます。

 

次回は関数ポインタについて学んでいきます。

 

〜END〜