/* * 20210604-01-QQQQ.c * 「Hello, World」+[改行] を画面に出力するプログラム */ #include <stdio.h> /* printf 等の宣言が入っている */ /* printf や putchar を使う場合に必要 */ /* * main */ int main ( void ) { /* main は C のプログラムに必ず必要 */ /* C 言語で作られるプログラム main + main から(直接/間接に)呼ばれる、 関数の集合で表現 */ printf( "Hello, World\n" ); /* printf はライブラリから取り出される */ return 0; /* プログラムの終了のちに利用される */ } /* Hello, World は、色々なプログラムを作る出発点 */
/* * CDATE FILENAME * * キーボードから一文字入力し、その文字によって異る国の挨拶をする * Input(入力) - Process(処理) - Output(出力) : IPO */ #include <stdio.h> /* * hello ( char contry ) * char contry : 国を表す一文字 * j : 日本 * e : 英語 * c : 中国 * f : フランス語 * g : ドイツ語 */ void hello ( char cmd ) { if ( cmd == 'j' ) { /* 'j' の時は、日本語にする */ printf ( "こんにちは\n" ); } else if ( cmd == 'e' ) { /* 'e' の時は、英語にする */ printf ( "Hello\n" ); } else if ( cmd == 'c' ) { /* 'c' の時は、中国語にする */ printf ( "ニイハオ\n" ); } else if ( cmd == 'f' ) { /* 'f' の時は、フランス語にする */ printf ( "Bonjour\n" ); } else if ( cmd == 'g' ) { /* 'g' の時は、ドイツ語にする */ printf ( "Guten tag\n" ); } else { /* どれでもなければ.. */ printf ( "???\n" ); } } /* * main */ int main( void ) { printf ( "国を表す文字を入力してください\n" ); printf ( "\tj\t日本\n" ); printf ( "\te\t英語\n" ); printf ( "\tc\t中国\n" ); printf ( "\tf\tフランス\n" ); printf ( "\tg\tドイツ\n" ); printf ( "> " ); hello ( getchar() ); /* getchar() で文字を入力し、それに対応する結果を出す */ return 0; }
/* * CDATE FILENAME * * キーボードから一行(改行まで..)文字列を読込み、それを逆順に出す */ #include <stdio.h> /* * reverse ( char contry ) * char cmd : どのメッセージにするかを表す文字 * */ void reverse_line ( char ch ) { if ( ch == '\n' ) { /* 改行ならば.. */ /* なにもしなくてよい */ } else { /* そうでなければ.. */ /* putchar ( ch ); reverse_line ( getchar() ); このパターンだと、入力した結果をそのまま出す abc a bc a -> putchar bc -> 再帰 */ reverse_line ( getchar() ); putchar ( ch ); /* 入力した結果を逆順にしたい場合は cba cb a cb -> 再帰 a -> putchar */ } } /* * main */ int main( void ) { reverse_line ( getchar() ); /* 最初の文字を読み込んで .. */ putchar ( '\n' ); /* 改行を出力 */ return 0; }
/* * 20210611-01-QQQQ.c * 英小文字を英大文字に、英大文字を英小文字に入れ替える関数 */ #include <stdio.h> /* * char change_up_lower ( char ch ) * 引数で指定された文字が大英文字なら英小文字に、英小文字なら英大文字にする */ char change_up_lower ( char ch ) { /* 英大文字の処理 */ if ( 'A' <= ch ) { /* もし、 ch が 'A' 以上で .. */ if ( ch <= 'Z' ) { /* しかも、 'Z' 以下 なら .. */ /* 引数は英大文字だったので、英小文字に変換し、値を返す */ return ch - 'A' + 'a'; } } /* 英小文字の処理 */ if ( 'a' <= ch ) { /* もし、 ch が 'a' 以上で .. */ if ( ch <= 'z' ) { /* しかも、 'z' 以下 なら .. */ /* 引数は英小文字だったので、英大文字に変換し、値を返す */ return ch - 'a' + 'A'; } } /* 何れでもない場合 */ return ch; /* 引数の値をそのまま、関数の値として返す */ } /* * main */ int main ( void ) { /* 英大文字 ( 'Q' ) の場合 */ printf ( "英大文字 ( 'Q' ) の場合 「" ); putchar ( change_up_lower ( 'Q' ) ); printf ( "」となります。\n" ); /* 英小文字 ( 'h' ) の場合 */ printf ( "英小文字 ( 'h' ) の場合 「" ); putchar ( change_up_lower ( 'h' ) ); printf ( "」となります。\n" ); /* 何方でもない ( '4' ) の場合 */ printf ( "何方でもない ( '4' ) 場合 「" ); putchar ( change_up_lower ( '4' ) ); printf ( "」となります。\n" ); return 0; }
#include <stdio.h> int main(void) { printf ( 'A' ); /* printf の引数は「文字列」*/ /* 引数に「文字」を指定してみた */ /* => コンパイル時には、ワーニング(警告)が出る 引数に「文字列」を指定すべきなのに、 「文字列でない『文字』」をしていしている */ /* リンクして実行ファイルは作れるが、 正しい(期待した..)結果にはならない */ return 0; }
#include <stdio.h> int main(void) { printf ( "A" ); /* printf が期待してる「文字列」を与える */ /* => コンパイルもリンクも問題ないし、 実行結果も期待した通りになる */ return 0; }
#include <stdio.h> int main(void) { putchar ( 'A' ); /* 「A」という文字を画面に出力する */ putchar ( '\n' ); /* 改行する */ return 0; }
#include <stdio.h> int main(void) { putchar ( getchar() ); /* getchar() によってキーボードから一文字入力し、それを出力する */ putchar ( '\n' ); /* 改行する */ return 0; }
#include <stdio.h> int main(void) { putchar ( getchar() + 1 ); /* 入力した文字の、(ASCII コード表の)次の文字を出力する */ putchar ( '\n' ); return 0; }
#include <stdio.h> /* 数字を二文字入力すると、 その数字が表す数値の和を計算する 12 <= 入力 '1' => '1' - '0' = 1 という数値 '2' => '2' - '0' = 2 という数値 1 + 2 -> 3 という数値 3 + '0' => '3' という数字(を表す ASCII コード) putchar で出力すると、「3」と表示される => あたかも、二つ数の和の計算をしているように見える */ int main(void) { putchar ( ( getchar() - '0' ) + ( getchar() - '0' ) + '0' ); putchar ( '\n' ); return 0; }
#include <stdio.h> int main(void) { printf ( "Hello, World\n" ); getchar(); /* キーボードからの入力待ち */ /* => エンターキーを押すと、文字(改行)の入力がなされ、 その入力された文字データは、捨てられる <= 副作用として、 プログラムを一時停止して、 再開の指示待つために利用される */ return 0; }
#include <stdio.h> /* キーボードから一文字入力して、 Y/y => Yes N/n => No その他 => ? */ void process ( char ch ) { /* 処理関数 */ /* 引数は「文字」なので、仮引数変数(ch)の型は「char」型 */ if ( ch == 'Y' ) { /* ch (という文字コードを持つ変数の値が..) 文字 'Y' に等しい */ printf ( "Yes\n" ); /* 出力として「Yes」を出力する */ } else if ( ch == 'y' ) { printf ( "Yes\n" ); } else if ( ch == 'N' ) { printf ( "No\n" ); } else if ( ch == 'n' ) { printf ( "No\n" ); } else { printf ( "?\n" ); } } int main(void) { process ( getchar() ); /* キーボードから一文字入力する */ /* 入力した文字は、関数 process に渡す */ return 0; } /* イメージ +-- Yes キーボード : 入力 -> 処理 -> 出力--+-- No +-- ? */
#include <stdio.h> #include <string.h> /* 文字列を == で比較するとどうなるか ? */ void string_compare ( char *a, char *b ) { printf ( "a=「" ); printf ( a ); printf ( "」\n" ); printf ( "b=「" ); printf ( b ); printf ( "」\n" ); if ( a == b ) { /* 何をもって「同じ」としているかがよくわからない.. */ /* => 文字の時にはうまくゆくが、文字列の時には、信頼できない .. */ /* 実は... (後日) */ printf ( "==:等しい\n" ); } else { printf ( "==:等しくない\n" ); } if ( !strcmp ( a, b ) ) { /* 「同じ文字列」<=> 「同じ文字の列からなる」 */ printf ( "sc:等しい\n" ); } else { printf ( "sc:等しくない\n" ); } } int main(void) { string_compare ( "abc", "abc" ); string_compare ( "0abc" + 1, "1abc" + 1 ); return 0; }
#include <stdio.h> /* キーボードから入力された一行(改行で終わる..)文字列を、 画面に出力する 入力 abc[改行] 出力 abc[改行] !! 一番簡単な場合 入力 [改行] 出力 [改行] !! 次の例 入力 a[改行] 出力 a[改行] 一般化 入力 abc..z[改行] 出力 abc..z[改行] a getcharしたものをputchar bc..z[改行] 再帰が利用できる 入力と再帰を組み合わせる場合は、 入力結果を利用して、 判断と、処理の両方をする必要がある 関数の実引数に、入力(getchar())を与えて、 関数の中で、その値を仮引数変数を経由して 参照する必要がある 入力関数(getchar())の副作用を、うまく回避する方法 => 「先読み」 */ void echo_line ( char ch ) { if ( ch == '\n' ) { putchar ( '\n' ); } else { putchar ( ch ); /* 入力されたものを出力した */ echo_line ( getchar() ); /* 次の文字も入力して */ /* 残り部分の処理を行う */ /* 再帰呼び出しで処理 */ } } int main(void) { echo_line ( getchar() ); return 0; }
#include <stdio.h> /* キーボードから入力された一行(改行で終わる..)文字列を、 画面に出力する 失敗例 1 2 3 4 5 6 7 8 9 ^ 14 17* 14 17* */ void echo_line ( void ) { if ( getchar() == '\n' ) { putchar ( getchar() ); } else { putchar ( getchar() ); echo_line ( ); } } /* getchar() 関数が呼びだされるたびに、新しい文字を読み込むので、 条件で利用する値と、出力する値が異なってしまう => 入力を行う「副作用」の制御ができてない */ int main(void) { echo_line(); return 0; }
#include <stdio.h> /* キーボードから入力された一行(改行で終わる..)文字列を、 画面に出力する 入力 abc[改行] 出力 abc[改行] !! 一番簡単な場合 入力 [改行] 出力 [改行] !! 次の例 入力 a[改行] 出力 a[改行] 一般化 入力 abc..z[改行] 出力 abc..z[改行] a getcharしたものをputchar bc..z[改行] 再帰が利用できる 入力と再帰を組み合わせる場合は、 入力結果を利用して、 判断と、処理の両方をする必要がある 関数の実引数に、入力(getchar())を与えて、 関数の中で、その値を仮引数変数を経由して 参照する必要がある 入力関数(getchar())の副作用を、うまく回避する方法 => 「先読み」 */ void echo_line ( char ch ) { if ( ch == '\n' ) { putchar ( '\n' ); } else { putchar ( ch + 1 ); /* 入力されたもの次を出力した */ echo_line ( getchar() ); /* 次の文字も入力して */ /* 残り部分の処理を行う */ /* 再帰呼び出しで処理 */ } } int main(void) { echo_line ( getchar() ); return 0; }
#include <stdio.h> /* 指定された英大文字を小文字に変換して返す関数 */ char tolower ( char ch ) { /* 引数として「文字」を与えるので、「char」型の仮引数変数 */ /* 返り値として「文字」を返すので、「char」型の関数宣言 */ return ch - 'A' + 'a'; /* 'A' => 'A' - 'A' = 0 => 0 + 'a' => 'a' 'B' => 'B' - 'A' = 1 => 1 + 'a' => 'b' .. 'Z' => 'Z' - 'A' = 26 => 26 + 'a' => 'z' */ } int main(void) { putchar ( tolower( 'A' ) ); putchar ( tolower( 'Q' ) ); putchar ( tolower( '@' ) ); /* ASCII Code 表から「`」*/ putchar ( '\n' ); return 0; }
#include <stdio.h> /* 指定された英大文字を小文字に変換して返す関数 Verion 2. 英大文字の時だけ小文字に、 そうでないときは、そのままの文字を返す */ char tolower ( char ch ) { /* 英大文字かどうか判定する */ /* 'A' <=「英大文字」 <= 'Z' */ /* if ( 'A' <= ch <= 'Z' ) としたいところだが... だめ => 「'A' <= ch」の条件と「ch <= 'Z'」の条件が両方成立 */ if ( 'A' <= ch ) { if ( ch <= 'Z' ) { /* 二つの条件の両方が成立した場合 */ return ch - 'A' + 'a'; /* 英大文字を英小文字に変換 */ } else { return ch; /* 英大文字ではないので、そのまま返す */ } } else { return ch; /* 英大文字ではないので、そのまま返す */ } } int main(void) { putchar ( tolower( 'A' ) ); putchar ( tolower( 'Q' ) ); putchar ( tolower( '@' ) ); /* 英大文字でないので「@」がそのまま */ putchar ( '\n' ); return 0; }
#include <stdio.h> /* 指定された英大文字を小文字に変換して返す関数 Verion 3. return 命令が、関数を終了(中断)させる性質の利用 */ char tolower ( char ch ) { if ( 'A' <= ch ) { if ( ch <= 'Z' ) { /* 二つの条件の両方が成立した場合 */ return ch - 'A' + 'a'; /* 英大文字を英小文字に変換 */ /* ここで、関数が終了するので.. 23 行目は実行されない */ } else { /* do nothing */ } } else { /* do nothing */ } return ch; /* 英大文字ではないので、そのまま返す */ } int main(void) { putchar ( tolower( 'A' ) ); putchar ( tolower( 'Q' ) ); putchar ( tolower( '@' ) ); /* 英大文字でないので「@」がそのまま */ putchar ( '\n' ); return 0; }
?O??(2021/06/04)????e ??T???????? ????? C ?????O????w?? ???????? ( ?????I???A????鎖???????????????????? ) ?u????鎖?v:?????????o????? => ?R?[?f?B???O(??????I?? 1 ?? 1 ??????????????l????) => ?C???u??????I?v?????????u??????v???o?????? ??: 1 ?i?@ ?u???R???v???u???????????v??\???????i(?R?[?f?B???O???i????) => ?u???R????v?Z?v??????v???O???? # ???R????v?Z?????\?? 1 ?i?@??????????o????? ????? ?????AC ????? 0 ????w?т???? => ?v?Z?@????邱??? C ????????(?\??)??????????? ??: ?O???t?B?b?N?X ?uHello, World?v??? ????P????v???O???? : Hello, World ?????v???O???~???O : ????????C???????????????????s?? ?uHello, World?v??? ???:?u#include?v/?uint?v/?ureturn 0;?v???????????? ?? ??? ????????O??????????? ?????` : ???????O??t???? ( <= ???????`????? ) ?????яo?? : ???????p????A??????O????????????????яo?? ????? : ??????`?????????? ????? : ?????`??\???????????????O?????????? void func(void) { .. } ^^^^^^^^^^^^^^^ ^^^^^^ ??????? ????{?? ??????A??????t???鎖??????? ????????????????? ??T?? : ?????????A?u??????v??????????? => ????????????????????????uchar *?v??????u?????????v ?u?????????????v => ??????????u?^?v???w??????? ?u?^?v: ?f?[?^??????l??W?? + ????????????鉉?Z??W??? ?? : ???? <=> < { .., -2, -1, 0, 1, 2, .. }, {+,-,*,/} > => ?f?[?^??????l??W?????????^?????????? ???w : <Q,{+}> -> ?u?Q?v????鎖?????????? <Q,{+,*}> -> ?u??v????鎖??????? !! ???w??F?X??u???v??A?^????????????? ???????????^?????? ?????K?p(???????яo??)???A ?????????A?????K?????u?^?v??f?[?^??^????K?v?????? ??: printf ???????u??????v putchar ???????u?????v !! ???????????A(??????????????????..?^??) !! ?K???f?[?^??^????K?v?????? !! ???w : ???????????????????????A????????^????K?v?????? !! => ??????`?? ?^?? (??????????? char ??) ?u?^?v: ?l??W???????????A?????????Z?q????????? [2021/06/11] ???? ?o?? : putchar ?????p <= ?????????????????? ???? : getchar ??? ?L?[?{?[?h??????????????A ????????????? <= ?v???O??????????A?u????v??????? => getchar???????A?v???O????????A?L?[?{?[?h????????????????????(?v?Z????/????????????)????????? getchar ??p???鎖????A ?v???O???????{?p?^?[?????? : ?u????->????->?o??v????\?? ???????r ???????? ( ?????????? ) => ?u??????????A?????????????????????s????v??????\?? => if ?\?? if ( ???? ) { ????????????????????? } else { ???????s????????????(?????O) } ?u?????v ????? : !strcmp ??p????A?u????????r?v?????? !strcmp(A,B) ?????? A ??????? B ?????????????????A ?^(????????)???? ????? : ?u?????v???r??????? ???? A, B ???^????????? A == B => A ?? B ??????? ( A ?? B ???????? ) A != B => A ?? B ?????????? A < B => A ?? B ???(ASCII ?R?[?h?\??????..) ?O ?? : 'A' < 'B', '0' < '1', 'A' < 'a' A > B => A ?? B ???(ASCII ?R?[?h?\??????..) ?? A <= B => A ?? B ??? A >= B => A ?? B ??? ??????A?I??` ?????: ??????`?????????{???A???????g????яo?? ??????????????g????яo????A???????[?v???? ???I???(???????[?v?????????)?A ?????????p????A ???????g????яo???????????????????? => ???????g????яo???????A ??????l???X???鎖????A ??I?I??A???????g????яo???????????? void rec( V ) { if ( V ??????I?????? ) { ??A????? } else { ???? ( ?J???????????e ) rev ( V' ); <= ??A??яo???????????A ??????l???X???A ???????X??????A??I?I??A V??????I?????????????????????? !! ????: !! ????????????^???A !! ??A??яo????????????A????????????Z?????? !! ?I?????????A?u???????????? 0 ????v?????? !! cf. !! ???w?I?A?[?@ !! ??????????, n = 0 ( n = 1 ) !! n ??l?????? !! \forala n \in N P(n) !! <=> !! P(0) !! P(k) -> P(k+1) !! <= !! P(3) ? !! P(3) <= P(2) !! P(2) <= P(1) !! P(1) <= P(0) !! P(0) } C ??????? => ???????O??????????? cf. ???w??u????v ??`??A?l?悪?????????????A ??`???C???v?f x ??????A?n???v?f y ?? ?????????K????? ??: f(x) = x^3 ??`?? : ???? R ?l??? : ???? R ????K?? : x -> x * x * x ?????????? ?????l : ???I??l??????K?p??????????? f(2) = 2 * 2 * 2 = 8 !! ??????w??uC ?????w????x?v??A !! ??????^??????邪?A??????????l??A?s??(?w????????) !! ?B??Agetchar() ??A??????l(?L?[?{?[?h????????????)????????A !! ????I???????????.. ????.. C ??????????A?u?l?v????????????A ????A????u?l?v???v???O??????????p???鎖??????? => ???l????????(?l???????)???`???@ ???l???????????`??d?? ????????????O(??????? void)??A ?u????l??^?v?????????? # void ??A?u?l????????v???????????? # cf. # ????????????????uvoid?v??????? # ?u??????????????v???? # => ?uvoid?v=>?u??????????v ????{??? return ?? ????????????????A ???????l(????l)?????A?u???v??l???w????? return ????????s???????_??A?????I?????? C ??????????A ???w????????l??A ?????????A???l???????A?K?????v???O???????????? !! ???????w????????l?????? C ???????????鎖??????? !! ??????????^??????l??^????A !! (???w???????????..) ??`???l????????????
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20210611-01.c
/* * 20210611-01-QQQQ.c * 英小文字を英大文字に、英大文字を英小文字に入れ替える関数 */ #include <stdio.h> /* * char change_up_lower ( char ch ) * 引数で指定された文字が大英文字なら英小文字に、英小文字なら英大文字にする */ char change_up_lower ( char ch ) { /* 英大文字の処理 */ if ( 'A' <= ch ) { /* もし、 ch が 'A' 以上で .. */ if ( ch <= 'Z' ) { /* しかも、 'Z' 以下 なら .. */ /* 引数は英大文字だったので、英小文字に変換し、値を返す */ return ch - 'A' + 'a'; } } /* 英小文字の処理 */ if ( 'a' <= ch ) { /* もし、 ch が 'a' 以上で .. */ if ( ch <= 'z' ) { /* しかも、 'z' 以下 なら .. */ /* 引数は英小文字だったので、英大文字に変換し、値を返す */ /* ** この部分を完成させなさい */ } } /* 何れでもない場合 */ return ch; /* 引数の値をそのまま、関数の値として返す */ } /* * main */ int main ( void ) { /* 英大文字 ( 'Q' ) の場合 */ printf ( "英大文字 ( 'Q' ) の場合 「" ); putchar ( change_up_lower ( 'Q' ) ); printf ( "」となります。\n" ); /* 英小文字 ( 'h' ) の場合 */ printf ( "英小文字 ( 'h' ) の場合 「" ); /* ** この部分を完成させなさい */ printf ( "」となります。\n" ); /* 何方でもない ( '4' ) の場合 */ printf ( "何方でもない ( '4' ) 場合 「" ); putchar ( change_up_lower ( '4' ) ); printf ( "」となります。\n" ); return 0; }
$ ./20210611-01-QQQQ.exe 英大文字 ( 'Q' ) の場合 「q」となります。 英小文字 ( 'h' ) の場合 「H」となります。 何方でもない ( '4' ) 場合 「4」となります。 $
Download : 20210611-02.c
/* * 20210611-02-QQQQ.c * 指定した文字列の中の英小文字を英大文字に、英大文字を英小文字に入れ替えて出力する関数 */ #include <stdio.h> #define EOS '\0' /* マクロ(EOS) を、NULL 文字 '\0' で定義 */ /* 以下の結果は、20210611-01-QQQQ.c の内容を、そのまま利用する */ /* * char change_up_lower ( char ch ) * 引数で指定された文字が大英文字なら英小文字に、英小文字なら英大文字にする */ char change_up_lower ( char ch ) { /* 英大文字の処理 */ if ( 'A' <= ch ) { /* もし、 ch が 'A' 以上で .. */ if ( ch <= 'Z' ) { /* しかも、 'Z' 以下 なら .. */ /* 引数は英大文字だったので、英小文字に変換し、値を返す */ return ch - 'A' + 'a'; } } /* 英小文字の処理 */ if ( 'a' <= ch ) { /* もし、 ch が 'a' 以上で .. */ if ( ch <= 'z' ) { /* しかも、 'z' 以下 なら .. */ /* 引数は英小文字だったので、英大文字に変換し、値を返す */ /* ** この部分を完成させなさい */ } } /* 何れでもない場合 */ return ch; /* 引数の値をそのまま、関数の値として返す */ } /* * void print_change_up_lower_string ( char *string ) * 引数で指定した文字列の中の英小文字を英大文字に、 * 英大文字を英小文字に入れ替えて出力する関数 */ void print_change_up_lower_string ( char *string ) { if ( *string == EOS ) { /* 空文字列 ("") だった.. */ /* 何もしない */ } else { /* 取り敢えず、先頭の文字だけ変換を行って、出力 */ putchar ( change_up_lower ( *string ) ); /* 残りの文字列は、再帰で処理 */ print_change_up_lower_string ( string + 1 ); } } /* * main */ int main ( void ) { printf ( "Aa0BB11cc@+\nXy" ); print_change_up_lower_string ( "Aa0BB11cc@+Xy\n" ); return 0; }
$ ./20210611-02-QQQQ.exe Aa0BB11cc@+ XyaA0bb11CC@+xY $
Download : 20210611-03.c
/* * 20210611-03-QQQQ.c * 10 未満の長さの文字列の長さを表す一文字の数字を返す関数 */ #include <stdio.h> #define EOS '\0' /* マクロ(EOS) を、NULL 文字 '\0' で定義 */ /* * char length_of_string ( char *string ) * 引数の文字列の長さを表す、一桁の数字を返す関数 * 文字列の長さは一桁の場合しか、「適切に動作」しない */ char length_of_string ( char *string ) { if ( *string == EOS ) { /* 空文字列なら、長さは 0 */ return '0'; /* 長さ「0」を表す『文字(数字)』「'0'」を返す */ } else { /* 一文字分短い『文字列』の長さを再帰で求め、それに 1 を加える */ /* ** この部分を完成させなさい */ } } /* * main */ int main ( void ) { printf ( "文字列「\"abc\"」の長さは " ); putchar ( length_of_string ( "abc" ) ); printf ( " です。\n" ); printf ( "文字列「\"123456\"」の長さは " ); putchar ( length_of_string ( "123456" ) ); printf ( " です。\n" ); /* 長さが 10 を越える場合は、不適切な結果になる */ printf ( "文字列「\"1234567890123\"」の長さは " ); putchar ( length_of_string ( "1234567890123" ) ); printf ( " です。\n" ); return 0; }
$ ./20210611-03-QQQQ.exe 文字列「"abc"」の長さは 3 です。 文字列「"123456"」の長さは 6 です。 文字列「"1234567890123"」の長さは = です。 $