pit-rayの備忘録

開発中に得た知識を記事にしていくブログ

備忘録

【C++】ifstreamでUTF-8のBOMをスキップする方法(boost property tree)

今回は、前回とは逆で、UTF-8 with BOMを読み込むときにBOMを取り外す方法をご紹介します。例として、boostのproperty_treeでファイルを読み込む場合を考えます。 何故なら、property_treeではBOMに対応してないため、正常にデータを読み取ることができない…

【C++】ofstreamでUTF-8 with BOMを出力する方法

今回は、C++の標準ライブラリのfstreamのwrite関数を用いた、バイトオーダーマーク(BOM)の付け方をご紹介します。codecvtを用いた方法もあるようですが、私の環境ではうまくできなかったため、直接バイナリデータを書きこむ方法を用います。 バイトオーダー…

【Qt】複数のウィジェットを含むカスタムウィジェットを作る方法

今回は、Qtについての備忘録です。 前回と同様、学習のアウトプット目的で書いています。 ご指摘等ありましたら、コメントに書いていただけると幸いです。動作環境は以下の通りです。 【OS】Windows10 64bit 【CPU】Intel core i5-4590 【Qt】5.11.2 64-bit …

【Qt】CDBをデバッガとして利用する方法

今回は、QtにCDBをデバッガとして設定する方法を解説します。Qtでデバッグ開始時に以下のようなエラーを吐かれてデバッグができないケースがあります。 The selected debugger may be inappropriate for the inferior. Examining symbols and setting breakp…

インライン関数はヘッダファイルで実装する

インライン関数はC++やC99以降のC言語でサポートされています。 インライン関数はマクロ関数のようにオーバヘッドを避けることができます。インライン関数の書き方の例はこのようになります。 inline int Five() { return 5 ; } マクロ関数で実装する場合は…

<C言語>解放後のポインタにNULLを代入するべき(ダングリングポインタ)

今回題材とするのはダングリングポインタ(dangling pointer)です。 ここで出てくるdanglingというのはぶら下がるという意味で、ポインタがどこのメモリを指しているのかわからない状態を指します。ダングリングポインタは攻撃ができる脆弱性につながる可能性…

<C言語>memcpyとmemmoveの違い

本日はmemmoveとmemcpyの違いが気になり、調べていました。 memmoveとmemcpyはどちらもアドレスをコピーする関数(string.hに定義)です。まず、代表的な違いを挙げてみます。 この二つの関数がオーバーラップ、つまり、コピー元を上書きする形でコピーする際(…

<C言語>ヘッダファイル二重定義防止

今回は初心に戻って整理してみようというやつです。C言語でファイルが複数になるとヘッダファイルなどを用いて関数の管理などをすることになると思います。 しかし、ここで気を付けないといけないのが二重定義と呼ばれるものです。 通常、ヘッダファイルはソ…

<C言語>構造体へのポインタの初期化

今回もC言語についての備忘録になります。 今回のトピックは 構造体へのポインタの初期化 です。(タイトルにもありますが) これは初歩的なミスです。 まず、悪い例のソースコードはこちら。 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _Position { int</string.h></stdlib.h></stdio.h>…

<C言語>malloc()+memset()とcalloc() ゼロクリアする場合における違い

今回は開発していて気になったことがあったのでググってみました。 言語はCです。 最初の記事にも書いたのですが、私自身、プログラミング歴が長いわけではないため、参考程度に見ていただければ幸いです。 まず、今回気になったことは malloc()+memset()に…