2012年7月9日月曜日

【C言語】strlen関数を自作してみた。【第一弾】

梅雨も明け、蒸し暑い夏がやってきました。イトウです。

C言語の文字列、ポインタについて学ぶために、文字列の長さを返すstrlen関数を自作してみました。 実際にライブラリにあるstrlen関数と同じふるまいをします。


 自作のmy_strlen関数(my_strlen)
#include<stdio.h>

unsigned int my_strlen(const char* str){
    unsigned int length = 0; // (1)文字列の長さを入れる箱

   // (2)文字列の長さを数える
    while(*str++ != '¥0'){
        length++;
    }
    return length;
}


main関数
#include<stdio.h>

int main(void){
    char str[] = "Tokyo";

    printf("%d¥n", my_strlen(str) );
   return 0;
}



これだけなんですが、少しだけ勉強したことを補足します。



(1)文字列の長さを入れる箱

なぜintでなくてunsigned intなのか?
それは、取れる値の幅が関係してきます。値の取れる範囲は、
int -32768~32767
unsigned int 0~65535

です。
つまり、今計算したいのは「文字数」なので、マイナスになることはない。
なのでここで適切なのはunsigned intだということです。


(2)文字列の長さを数える

文字列の最後には'¥0'が入っています。なので、str != '¥0' が成り立つまでループを繰り返すことで、文字列の最後まで確認することができます。
また、引数はcharのポインタ型なので、*str++ とすることで、次の文字を見にいくことができます。




C言語で最初に直面する壁は文字列とポインタかと思います。大変ですが重要な基礎の部分なので、色々試してしっかり理解していきたいと思います。



1 件のコメント:

  1. Casino Poker - Blackjack and Craps with High Card
    A high-stakes, 썬 시티 21 card poker game is a combination of single 룰렛 만들기 or multiple bets. There are two types of single 강원 랜드 쪽박 걸 가격 bets in a casino: 라이브바카라 one 탱글다희 영구정지 standard

    返信削除