C/C++

C++で文字列ポインタ同士を連結する。

相変わらずC++の文字列ポインタは分けが分からない・・・ 文字列ポインター同士を連結して別の文字列ポインタに入れるには以下のように。 #include #include int main(){ char* a = "Hi"; char* b = ", Joe"; char* c = new char[strlen(a)+strlen(b)+1]; st…

C++で日付を取得する

time.hをインクルードする。 #include int main(){ struct tm *date; time_t now; int year, month, day; int hour, minute, second; time(&now); date = localtime(&now); year = date->tm_year + 1900; month = date->tm_mon + 1; day = date->tm_mday; ho…

gccの使い方

gccのオプション -v デバッグできるようにコンパイル -l インクルードパスを追加 -c オブジェクトファイルの生成 -o 実行ファイル名を指定 -Wall ワーニング全開 gcc -g -Wall helloworld.c foo.c -c gcc helloworld.o foo.o -o helloworld

実行ファイルや.soファイルの関数名を調べる

-g オプション付きでコンパイルする必要があるかも・・ /usr/bin/objdump --all-headers [ファイル] | grep [関数名]

C言語のchar配列の初期化

memsetが普通のやり方 char str[512]; memset(str, '\0', sizeof(str)); 一行でも記述可能 char str[512] = {0};

LinuxのC言語ライブラリのchownを使ってみる。

chown 関数 int chown(const char *path, uid_t owner, gid_t group); 所有者とグループ引数は名前でなく以下のgetpwnamとgetgrnam関数で得たIDを指定する。 struct passwd *getpwnam(const char *name); struct group *getgrnam(const char *name); 例 #inc…

GDBでデバッグ

GDBを使ってデバッグをしてみる。 コマンド 概要 r (run) 実行 s (step) 1ステップ実行 (関数内に入る) n (next) 1ステップ実行 (関数内に入らない) c (continue) 次のブレークポイントまで実行 p (print) [変数/関数] 変数や関数の戻り値を表示 b (break)…