読者です 読者をやめる 読者になる 読者になる

Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

どんな列(幅)でも行数でも読込む関数作りました

C言語を使っているとC++などのようなstringが使えないせいで 可変長の文字列を含んだファイルを読込むときは 非常に泥臭いことをしないといけない。。。か、もしくは 決めうちで列幅を固定してしまったりすることが多いと思います。そんなわけでどんなに列幅…

C言語のグローバル変数とexternについて

C言語では言語仕様上、グローバル変数は良く使うと思います。 できるだけ避けるのは言うまでもありませんが。 そこでよく混乱するのがexternではないでしょうか? ヘッダなんかをインクルードすると あれ?そういえばexternって……どうなんだっけ…ってことに…

わかりにくい関数ポインタを返す関数

関数ポインタって変な文法ですよねってお話です。 もちろんポインタの文法もいろいろツッコミどころはあるのですが (このせいでポインタよくわからんな人が続出)。 例えば次の宣言はぱっと見すぐにわかる人はC言語マスターです。 void (*func(const char *…

C言語の不可解なエラー(GCC) - 配列の宣言時にconst変数を指定したとき

stackoverflowで英語の練習を兼ねてダメダメ英語を連投してました。 そのうち迫害されるんじゃないかと思います(*´Д`) そんなわけで、Cのプログラムを書いていたのですが…… 不可解なエラーが…… 問題になったコード #include <stdio.h> #include <string.h> const int MAXLINE =</string.h></stdio.h>…

グローバルフックを使ってみた

グローバルフック(またはシステムフック)を使ってWindows APIで遊んでみました。 フックというのは 引用元: wikipedia 主に元のプログラムに対する機能追加・拡張やカスタマイズの手段として使われるほか、デバッグのための情報収集にも有効である。このよう…

printf系の書式文字列のエスケープでハマったけど解決した

printf系の書式(フォーマット)文字列でエスケープしなきゃなんないのはどれかわかってなくてハマりました。 正解のコード char buffer[80]; char format[20]; // 20もあれば用は足りるので…… printf("なんかいれてね : "); //sprintf(format, "%%%d[^\\n]%%*…

C言語でのヘッダの書き方

C

よくよく考えてみると真面目にC言語でヘッダの書き方を解説している 書籍ってないなと感じました。 かなり重要な部分なのに、ちゃんと知らない人が多い(自分も含めて)ので、 メモ書きとして残しておきます。 ただし、自分でCを書くことはもうないと思いま…

C/C++で配列の長さの求め方

C++ C

C/C++で配列の長さの求め方です。 超基本中の基本なのですが、しばらくC/C++の配列を使っていないと アレレってことになってしまいます。 今日はそれでハマりました。 sizeofを使って配列の長さ(要素数)を求めたはずが、 なんでか落ちる…バッファオーバー…

CSVでダブルクォートで囲まれた場合のパース方法(C言語)

CSVでダブルクォートで囲まれた場合のパースって なんかうまい書き方あるんだろうかと、 一応自分でも考えながら調べてみると、 あるんですね。なかなかきれいな書き方が。 まぁ、こんなのは普通のプログラミング言語使っている場合は ライブラリ頼りで自分…

WIN32APIだけでノベルゲームエンジン

WIN32APIとC言語だけでここまでのものが作れるなんてってことで、今回はプログラムの紹介記事です。 なにかとここのプログラムでゲームプログラミングを勉強させていただいています。 WindowsでのめんどくさいVC++でのDLLの作成もしていますので、勉強になる…

ハイパー簡易暗号化プログラム

前回書いたエントリーの オーバーフローするとえらいこっちゃな話 - Gobble up puddingとか 関数内で宣言した配列変数をreturnしてはいけない - Gobble up puddingの 具体的なサンプルってことで書いただけです。 こんなの暗号化じゃねーってはなしですが、…

関数内で宣言した配列変数をreturnしてはいけない

C

C言語では関数内で宣言した配列変数を素直にreturnする方法がありません。 知らないとこんなコードを書きがちですが、 この書き方では関数内で積まれたスタックがリターン時に解放されてしまうので、 返したアドレスが無効になってしまって、たまたま動くこ…

「char型へのポインタの配列」と「char型の配列へのポインタ」について

C言語で混乱しやすいのはポインタの表記ですね。 次の2つを見てみましょう。 char *foo[10]; char (*bar)[10]; このとき、fooとbarは意味が違います。 どちらかが 「char型へのポインタの要素数10の配列」 でもう一方が 「要素数10のchar型の配列へのポイン…

可変長引数(va_list, va_start, va_arg, va_end)を扱ってみた。

他の人のソースコードをみて、va_listを使っているのがあって、そういえば、自分では使ったことがなかったなと思い、可変長引数を受けとって処理するva_list, va_start, va_arg, va_endを使ってみました。 おおまかな使い方は行かな感じ。 void hoge(const c…

C言語で2次元配列(文字列)の動的確保

C++版はこちら C++で2次元配列(文字列)の動的確保 - Gobble up pudding文字列(char型)を扱っているときに、2次元配列で動的確保したい時があります。 int型など文字でないものは1次元配列で代用できるのですが、 例えば、住所など複数レコード格納したい…

C/C++でファイル一覧を再帰的に取得する方法

C/C++でファイル一覧を指定したディレクトリから再帰的に取得するソースです。 WindowsとLinuxで共用できるように書いてます。 bool traverse(const char* filepath, const int maxdepth, int curdepth); が今回のファイル一覧を再帰的に取得する処理です。 …