#プログラム

文字列結合

※ 実用には、標準関数のstrcatを使用する。 -- #include <stdio.h> void Bind_Str(char *s1, char *s2); int main(void) { char str1[100] = "Hello"; char str2[]="World"; Bind_Str(str1, str2); printf("%s\r\n", str1); return 0; } // 文字列s1に文字列s2を付加</stdio.h>…

多文字列の格納。

// 20個の文字列を格納する。1文字列あたり100文字。 // 格納後に表示。 #include <stdio.h> int main(void) { char str[20][100]; for(int i=0; i<20; i++) { scanf("%s", str[i]); } printf("\r\nkekkka\r\n"); for(int k=0; k<20; k++) { printf("%s\r\n", str[k]</stdio.h>…

小文字列を大文字列化

#include <stdio.h> #include <ctype.h> //toupper用 void ToBig(char *s); //プロトタイプ宣言 int main(void) { char str[100]; scanf("%s", str); ToBig(str); printf("%s", str); return 0; } void ToBig(char *s) { while(*s) { *s = toupper(*s); s++; } }…</ctype.h></stdio.h>

*cnt++; //ダメな例

cntの実体を +1することを想定した場合、 正しくは、 (*cnt)++; ※cntは、int *cnt; で宣言されているものとする。 -- *cnt++; だと単項式(ポインタ「*」も含まれる)より ++の方が優先度が高いため、 cntポインタ(アドレス)をプラス1し実体化したものとな…

16進数 → 2進数 変換

16進数 → 2進数 変換 再作成することがあるので記載。 #include <stdio.h> #include <string.h> int main(void) { char hex; char binary[5]; scanf("%c", &hex); switch(hex) { case '0': strcpy(binary, "0000"); break; case '1': strcpy(binary, "0001"); break; case '2':</string.h></stdio.h>…

scanf関数

scanfを使って int x; scanf("input:%d", &x); としていました。 コンパイルできるが、動作がおかしい。。なぜ。 と思って調べてみると。 int x; printf("input:"); scanf("%d", &x); としなくてはいけないことに気づきました。。

ファイル一覧を取得する。

stdlib.h の system()関数を用いて "ls"コマンドを実行できます。が、その結果を取得することができません。 -- いろいろなサイトを見て、 stdlib.h の popen()関数を用いて "ls"コマンドの結果を取得することができました。 ~~~~~~~~ ソース ~~~~~~~~~ #inc…

構造体

前に学校で勉強した 「構造体」 すっかり忘れている。。 #include <stdio.h> #include <string.h> //-- 構造体宣言 -- typedef struct dog { char name[20]; int age; }dog; int main(void) { dog mydog, yourdog; strcpy(mydog.name, "pochi"); mydog.age = 13; strcpy(yourdog</string.h></stdio.h>…

ポインタ

メモリ上のどの位置(番地 =アドレス)に変数を置くかは、"リンカ"が決める。 変数dataのアドレスを知りたい場合は、 printf("%p\n", &data); とする。 ポインタとは、アドレスを格納できる変数。 ポインタ宣言方法 int *pt; これを "「ポインタptの指すアドレスにある…

max_of_array --配列中の最大値を求める。

int max_of_array(int n, int len); 戻値: 引数で入力した配列要素の最大値 引数1: 配列 引数2: 配列長(= 配列の要素数) --------------------------------------------- #include <stdio.h> int max_of_array(int n, int len); int main(void) { int x[10]; for</stdio.h>…

記憶クラス指定子 auto, extern, static ・・・

・auto (省略可): プログラム実行中にメモリ上に確保されたり消去されたりする一時的な変数(= ローカル変数)。 ・extern: 他のCソースで使っているグローバル変数を自Cソースでも使用する場合に用いる。 <test1.c> #include <stdio.h> int cnt; //グローバル変数 宣言 int main(void) { ShowCn</stdio.h></test1.c>…

NULL

※ラズパイでは、NULLは /usr/include/stdio.h に定義されている? と思ったが、 # define __need_NULL # include <stddef.h> だけしか表記が無かった。 再度、find / -name 'stddef.h' で stddef.hを探した。 /usr/src/linux-headers-4.9.0-8-common/include/linux/std</stddef.h>…

EOF -End Of File ファイル終端を示す。

EOF を printfで表示してみた。 結果 10進表記(%d) ⇒ -1 16進表記(%x) ⇒ ffffffff ← 32bit マイナス1の値 文字表記(%c) ⇒ 文字化けして表示された。(何の文字かは不明) ※ラズパイでは、EOFは /usr/include/stdio.h に定義されている(プリプロセッサという)。 …

continue文 ― for文・while文の次ループへスキップする。

■ while, for文のループ中に次ループへスキップするには、"continue"を 使用する。 例: iが5の倍数の時は次ループへスキップ。iが1~100まで処理。 int i=1; while(i <= 100) { if(i%5 == 0) { printf("Next\r\n"); i++; continue; } printf("%d\r\n", i); …

break文 ― for文・while文を途中終了する。

■ while, for文を途中終了するには、"break"を使用する。 ※ループがネスト構造になっているときは、break文の存在するループをひとつだけ抜ける。 ネスト構造(=入れ子構造) ⇒この場合だと、ループの中にループがある場合。 例: iが1~100まで表示処理する…

文字列 代入

文字列の扱いは、難しい(ややこしい)。。 char str = "abcd"; 初期化時には、このような感じで文字列を代入できる。 配列の要素数は、文字数 + 1{ヌル文字(0)} の数で設定される。⇒この場合は、5つ。 文字列を途中で追加(結合)する場合は、 strcpy(str,…

番地 、 文字列

メモリ番地 ・ 1つの番地のメモリ容量は、1バイト。 ・示されたアドレスから何バイト使用するかは型で決まる。 文字列 ・文字列の終端には0(数字0(ゼロ):ヌル文字)を置く。 'A', 'B', 'C', 0 ・文字列の配列宣言は、文字列終端の 0 を含めた数で用意す…

コンパイル と リンク

コンパイル : Cソースからオブジェクトファイル(機械語)を生成する。 リンク : オブジェクトファイル と オブジェクトファイル および 参照された標準ライブラリをリンクする。 -- 一般に、“cc” や “cl” コマンドを実行すると、コンパイル&リンクが同…