5件中 1-5件目    

標準入力に何かを入力させて処理をするプログラムをデバッグする場合、何度も同じ入力を繰り返すことがよくある。そんなときには入力データをファイルとして用意して、パイプとリダイレクションを使ってファイルに入出力をすると便利だが、それ以外にもfreopen関数を使う方法もある。Windows上でVisual Studioのような統合開発環境を使って開発をしている場合には、こちらの方が便利かもしれない。


数値と文字を一対一で対応させ、数値を文字に変換したい場合、アルファベット(A~Z)を使うのであればC言語では以下のように書くことになる。

#include <stdio.h>

int main(){
	// A~Zを出力
	int i;
	for(i=0; i<=('Z'-'A'); ++i){
		printf("%c", 'A'+i); // 数値をアルファベットに変換
	}
	printf("\n");

	return 0;
}
ABCDEFGHIJKLMNOPQRSTUVWXYZ

与えられる数値が25以下であれば上記のコードで問題ないが、もっと大きい数値が与えられることも考えらるため、アルファベット小文字(a~z)やギリシャ文字(α~ω)、ひらがな(あ~ん)、カタカナ(ア~ン)などにも対応させたいことがある。

しかし、ギリシャ文字やひらがなのような2バイト文字でもアルファベットと同じように「'α'+i」や「'あ'+i」として文字が表示できるのか?という点が気になったので調べてみた。


デバッグ用に文字列をコンソールとファイルに出力する関数を作ろうと思ったのだが、printf関数やfprintf関数のように可変長な引数を取り、その引数をprintf関数に渡す関数をどう作ったらいいのかがわからなかったので調べてみた。


先日、久しぶりにLinux上でC言語を使ってプログラムを作ることになった。普段は、Windows上でVisual Studioを使って作るし、C言語よりもC++を使うことが多いので、くだらないところで30分ほど悩んでしまった。

問題となったのは、gccでコンパイルすると以下のような警告が出て、実行するとセグメントエラーが表示されてしまうというものだった。

warning: cast to pointer from integer of different size

ある変数AとBの値を交換するとき、普通は一時変数を使って値を交換する。 例えば、C言語で整数変数のSwap関数を書くと以下のようになる。

void swap(int *a, int *b){
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

実はこのとき一時変数(tmp)を使わずに値を交換する方法もある。


5件中 1-5件目