amazon

25.3.11

C++ string型からchar**型へ


C++ではどうも"文字列"が自動的にstringになるようだ。

Cのmain関数をc_main名前に変えて、C++から呼びだそうとしたとき警告が出た。
//main.cpp
#include "c_main.h"

int main(){
    char* argv[] = {"文字列"};
    int argc = 1;
    c_main(argc,argv);
    return 0;
}
をコンパイルして実行すると
$ g++ main.cpp
$ ./a.out
warning: deprecated conversion from string constant to ‘char*'
という警告が出る。

「string constant型からchar*型への変換は非推奨です」ということである。
警告なのでこのままでもいいのだが、気持ち悪いのでいじってみた。

char* argv[] = {(char*)"文字列"};
型変換なので、これだけでOK。

全体では以下のようにすればよい。
//main.cpp
#include "c_main.h"

int main(){
    char* argv[] = {(char*)"文字列"};
    int argc = sizeof argv/sizeof argv[0];
    c_main(argc,argv);
    return 0;
}


//c_main.h
int c_main(void);


//c_main.c
#include "c_main.h"

int c_main(int argc, char *argv[]){
    ---- 関数の中身 ----
}



余談だが、
int main(int argc, char *argv[])
のargvには実行時のオプションに与える文字列の配列、argcにはその個数が入っている。
例えば、
//main.c

#include <stdio.h>
int main(int argc, char* argv[]){
    printf("argc = %d\n",argc);
    printf("1 = %s, 2 = %s, 3 = %s\n",argv[0],argv[1],argv[2]);
    return 0;
}
をコンパイルして実行すると

$ gcc main.c
$ ./a.out 文字列1 文字列2 文字列3
argc = 4
1 = ./a.out, 2 = 文字列1, 3 = 文字列2
となる。

16.3.11

CPANメモ

cpanをいじっていたら、

$ cpan
と打っても反応しなくなった。

$ sudo perl -MCPAN -e shell



cpan[1]>

モジュールの検索
cpan[1]> i /モジュール名/

モジュールのインストール
cpan[1]> install モジュール名

15.3.11

e-taxで確定申告 on MBP Snow Leopard

e-Taxで確定申告をしたときに、つまずいたことをメモしておく。

まず、公的個人認証サービスクライントソフトがインストール出来ない。
これは、エラーにもあるように、Snow Leopardは標準でJAVAが入っていない事による。

http://support.apple.com/downloads/から、
Java for Mac OS X 10.6を検索して、
Download & インストール。

このままだと、e-taxの書類をSafariで作成中にJAVAのエラーが出る。
そこで、
Macのソフトウェア・アップデートでSafariの最新版をインストール。


また、エラーコード:AF0020-701 については
ここにあるが、Safariを一旦落として、Safari.appの情報を開いて、詳細設定で、32ビットモードで起動するにチェックを入れる。

後は、この辺参考にしました。
e-Tax奮闘記

計算しなくてい良いので、手書きの申告よりずっと楽でした。