電車にて、隣に座った親子の会話。
『なにそれ?拳だこ?』
『うん、仕事してるといつのまにかできちゃうのよね』
『へぇー、大変だねぇ』
どんな仕事だよ。
とか思ったけれども、普通に考えると拳だこでなくてペンだこですわな。
あ、それだけです。
でわ、でわ。
2007/03/23
[普通の日記]たこの話
2006/12/27
[C言語]バッファオーバーフローの練習
■今回のプログラム
長さ5のchar配列を作成。
gets()で標準入力。
printf()で標準出力。
■ソースファイル
#define NUM 5
int main(void)
{
//文字列バッファ宣言(長さは5)
char s[NUM];
printf("s address:%X¥n", &s);
printf("s length:%d¥n¥n", sizeof(s));
printf("input string:");
gets(s);//バッファのサイズを渡せないのでチェックのしようが無い
printf("%s¥n", s);
}
■実行結果
s address:BFFFFCBB
s length:5
warning: this program uses gets(), which is unsafe.
input string:fdsafdas
fdsafdas
親切にwarningが出てますが無視して大量入力。
宣言した領域をはみ出して書き込んでますね。
printf()も領域完全無視で読みにいってるみたいです。
fscanf()が嫌われてるのもこれが理由らしいです。
作るのは簡単(よりもたちが悪い)なだけに対策が難しいですね。
[C言語]文字列の検索
■処理の流れ
string1からstring2[i]の文字列を探す。
それだけ。
■ソースファイル
#include <string.h>
int main(int argc, char *argv[]){
//検索される文字列
char string1[] = "Hey mommy where is my shoes.";
//検索する文字列(する、されるじゃいまいちわかり難いね)
char *string2[] = {"Hey", "mommy", "where", "is", "my", "shoes", NULL};
//string2のインデックス用
int i = 0;
//string1の表示と先頭アドレスの表示
printf("string1 = ¥"%s¥"¥n", string1);
printf("string1はここから始まってますよ:%X¥n",&string1);
//string2の単語を先頭から検索、NULLになったらやめる
while(string2[i] != NULL){
printf("%sはメモリの%X番地から始まってますよ。¥n", string2[i], (int)strstr(string1, string2[i]));
i++;
}
}
■実行結果
string1 = "Hey mommy where is my shoes."
string1はここから始まってますよ:BFFFFC8F
HeyはメモリのBFFFFC8F番地から始まってますよ。
mommyはメモリのBFFFFC93番地から始まってますよ。
whereはメモリのBFFFFC99番地から始まってますよ。
isはメモリのBFFFFC9F番地から始まってますよ。
myはメモリのBFFFFC96番地から始まってますよ。
shoesはメモリのBFFFFCA5番地から始まってますよ。
1文字1バイト=一つの番地に収まる。
という訳でこういう場合わかりやすいね。
あとはstrlen()と組み合わせていろいろできそう。
[C言語]ファイルに出力
■何となく流れっぽいもの
コマンドライン引数を取得。
引数一つを1行にしてoutput.txtに出力する。
■ソースファイル
int main(int argc, char *argv[])
{
int i;
//ファイルポインタ宣言
FILE *fp;
//ファイルオーオプン
fp = fopen("output.txt","w");
if(fp == NULL){
printf("Can not open...");
return 1;
}
//書き込む
fputs("書き込み開始\n", fp);
for(i=1; i <= argc; i++){
fputs(argv[i], fp);
fputs("\n", fp);
}
fputs("書き込み終了\n", fp);
//別な書き込み方
fprintf(fp, "書き込み開始\n");
for(i=1; i <= argc; i++){
fprintf(fp, "%s\n", argv[i]);
}
fprintf(fp, "書き込み終了\n");
//ファイルクローズ
fclose(fp);
}
■実行結果
$ cat output.txt
書き込み開始
This
is
a
pen.
(null)
書き込み終了
書き込み開始
This
is
a
pen.
(null)
書き込み終了
■ソース書くだけでいっぱいいっぱい
別に良いよね、需要無いし。
(こういう考え方がいけないんだ…)
2006/12/26
[Mac][備忘録]"\"バックスラッシュが打てない
■Win用のJISキーボードを使うと、¥(エン)マークしか打てない。
という訳でいろいろ調べてみた。
やっぱり解決方法がありましたよ。(ネタ元URL参照)
キーマップを自作して適用するらしい。
■必要なもの
■手順
1.Uklele.appを開いたら"New Keyboard Layout"ってウィンドウで"Copy of other keyboard layout"を選択する。
2.Ukeleleのフォルダから"System Keyboards→Japanese→ROMAJI.keylayout"を選択。
3.メニューから"Keyboard→Set keyboard type..."
4."Select Keyboard Type"ウィンドウで(左)"Third party"、(右)JISとしてやる。
5."~/Library/Keyboard Layouts"に保存。
6.いったんログアウト。
7.システム環境設定→言語環境→入力メニューにさっき保存したキーボードがあるからチェックを入れる。
8.ことえりの入力モードに追加されているのでそれを選択する。
■こんな感じで
OKでした。
2006/12/21
[C言語]コマンドライン引数を使ってみる
■mainの第一引数に引数の数、第二引数に文字列配列
具体的にはこんな感じ。
int main(int argc,char *argv[])//argcが引数の数、argv[]が実際の引数
{
int i;
//第一引数から最後の引数まで順番に表示
for(i = 1; i <= argc; i++){
printf("第%d引数:%s\n",i,argv[i]);
}
return 0;
}
ちなみに、第零引数は実行ファイルへのパス。 (多分カレントディレクトリからの相対パス)
■実行結果
第1引数:Is
第2引数:this
第3引数:a
第4引数:pen
第5引数:?
第6引数:(null)
[C言語]ファイルから入力
■ファイル入力テスト
ソースファイルはこちら
#define NUM 256
int main(void)
{
FILE *fp;
char string[NUM];
char s1[NUM],s2[NUM];
//ファイルオープン
fp = fopen("inputfile.txt","r");
//オープン成否判定
if(fp == NULL){
printf("ファイルが開けませんよ?\n");
return 1;
}
printf("ファイル読み出し開始\n");
//ファイル読み出し
while(fgets(string, NUM, fp) != NULL){
printf("%s", string);
}
printf("ファイル読み出し終了\n");
//現在位置(どこから読み込むか)を先頭に戻す
fseek(fp, 0, 0);
printf("二度目のファイル読み出し開始\n");
//ファイル読み出し2
while(fscanf(fp, "%s %s", &s1, &s2) != EOF){
printf("名:%s 姓:%s\n", s1, s2);//fscanfの場合最後の改行は空白に変換されるらしい
}
printf("二度目のファイル読み出し終了\n");
//ファイルクローズ
fclose(fp);
return 0;
}
読み込むファイルはこれ
板 かまぼこ
だんご 笹
実行結果はこれ
命 大雪
板 かまぼこ
だんご 笹
ファイル読み出し終了
二度目のファイル読み出し開始
名:命 姓:大雪
名:板 姓:かまぼこ
名:だんご 姓:笹
二度目のファイル読み出し終了
fscanfは嫌われているみたいね。
扱い方が独特らしい。
あとエラー処理が面倒くさくなるみたい。
2006/12/20
[ブログ改造日記]あちらをたてればこちらがたたず
■改行を<br />に変換…
なんて処理をbloggerまかせにしていたので、タグを使った編集すると改行入りまくりですよ。
やはりタグ使うと結構改行するので…。
古い設定を残すと新しいのに影響するという罠。
しかも今の設定も既に改善案があったりしてもうどうしたら良いのやら…。
WEBデザインは熟慮してから決めましょうねって話ですかね。
2006/12/19
[JavaScript]JavaScript入門する
なんていう突っ込みは受け付けません。
■.jsファイルの読み込み
スクリプトタグの中にsrc属性をつけてパスを指定する。
そんな突っ込みも受け付けません。
[C言語]C言語入門してみる
Wiki2Html(Java)も一緒に行方不明です。
どうせもう一度作るなら勉強もかねてほかの言語にしましょうかね。
というわけで、C言語入門してみる。
■なぜ今C言語なのか?
- 『C言語は現代のアセンブラ』って誰かが言ってた。(検索しても見つからず…)
- ポインタ、構造体を知る=PCのメモリの使い方を知る?
→クラス、メソッドとかの理解にも役立つ? - 古い技術を使うのはなんか格好良い(古いなんていっちゃだめか?)
■必要な機能
- HTTPリクエスト
- HTMLソース書き換え
- 文字コード変換
- ファイルへ保存
- URLリストからDLする
- 上階層を自動保存
- WEBの構造も保存(フォルダ自動作成)
■ぼちぼち
やっていきます。
2006/12/18
[普通の日記] 昨日から今日にかけての日記
いつもと同じ道も飽きるのでいつもと違う道を通ってみる。
千葉県立中央博物館を発見。嫌な予感。
なんとか大学付属病院を発見。周囲をぐるりと回ろうと思ったらいつの間にか敷地内っぽいところへ迷い込む。 仕方ないので来た道を戻る。
結果、1時間くらいの寄り道。
しかしまぁ、良く寝るなぁ今月に入って5度目ですよ。
うわ、学習能力があるのかどうか不安になってくるなぁ…。
2006/12/17
[Mac][備忘録]MacでWindow用キーボード
で、どうやって全角/半角を切り替えるかというと、
[Ctrl]+[スペース]
だそうだ。
いや、多分こっちの方が基本なのだろうけれどね。
ちなみにWinのキーボードでは、
コマンドキー→Windowsキー
オプションキー→Altキー
となっているようだ。
2006/12/15
[Mac][備忘録]Macでrootを有効にする
Finder→アプリケーション→ユーティリティ→NetInfoマネージャ.appを選択(Spotlightで探しても良いね)。
メニューからセキュリティ→認証。
認証が終わったら同じくメニューのセキュリティからルートユーザを有効にする。
(実際はSUDOコマンド使う方が良いらしいけれど…)
[普通の日記]USBメモリをなくした…。
作り直すのも面倒くさいし手動アップロードもしんどい。
という訳でしばらくはBLOGのみの更新(この更新もしばらくぶりだけどね)
ちまちまやっていきたいと思います。
2006/12/10
[普通の日記]言わなきゃやらないので言ってみる
ってか結構可能性高いかも…。
ネタになりそうなもの調べてはいるのだけれども、
まとめるのが面倒くさいのよ。
いや、言い訳ですがね。
予定としては優先順位順にこんな感じかね?
1.スコーラのネタをまとめる(CGIとフォーム)。
2.卒研
3.Javaの勉強
4.Macの使い方
5.SSHサーバの反応が遅い原因を調べる
あ、就職活動書いてないじゃん。
大丈夫か?俺?
2006/12/02
2006/12/01
Windows(PortableAppsを使ってみた)
うまく一言で表せませんね。
いろんなソフトをUSBにインストールして、USBポートさえあればどこでも同じ環境で使えるらしい。
ということで、スタンダード版をダウンロードして使ってみた。
USB1.0だと使い物になりませんね。
私の気が短いだけかもしれませんが。
USB2.0なら大丈夫な感じ。
firefoxとthunderbirdを使ってみたところ、意外に便利。
家PC以外だとマウスジェスチャー付いてないし。
メールもいろいろなところに分散しないでよい感じ。
(これは多分メール受信の仕方が悪い)
家の設定コピーして持ち歩いてみようかなと。
USBと自宅PCにメール保存しておけばよい感じにミラーリングっぽくなりそうだしね。
ちなみにスタンダード版に入っているのはこんな感じ。

画像でごめんなさいね。
書き写すのめんどうなんだわ。
使ったこと無いソフトもあるし、これを機会に試してみようかなと。
以下続くかも。
普通の日記(人体を通信路にする)
人間の体を通してプレイヤー、ヘッドホン間の音声データを送るらしい。
body area network
なんて技術を使っているらしい。
無線のような使い心地らしい。
いやな感じの痛みもないらしい。
…読めたのはこれくらい。
体に悪そうだと思うのはきっと古い人間だからなんだろうな。
ブログ改造日記(Google AdSense(2))
GoogleAdSense登録完了してました。
意外と審査はゆるいらしい。
(blogspot.comからの登録だからかもしれない)
後は振込み口座の登録と、実際に振り込めるかのテストして完了。
ということで早速ページ上下段に広告追加してみました。
ネタを絞っていないからどんなつながりがあるのか良く分からない広告が表示されてますね。
個別ページ行けばまだましになるのかな?
後はフィルタやら何やら設定できるらしいのでいろいろ試してみたいと思います。