自分用メモ

まだいろいろと再構成中。

2014年02月

ARROWS X F-10Dにドライブネットクレイドル01を付けて、ドコモ ドライブネットをやっているのだが、この前までは正常に動いていたのに今日やってみると、Bluetoothでクレイドルは認識するものの、ドコモダケの下の切り株の絵が現れず、結局ナビの機能を全く使えないという有様。

なので、113でドコモに聞いてみたところ、クレイドルをリセットしてやってみてくれと。ちょっと今は手元にないのでこれは後日やってみるとして、ネットで検索してみると・・・

ARROWS X F-10D と ドライブネット SPX-SC01 (1)
ARROWS X F-10D と ドライブネット SPX-SC01 (2)
パイオニア製 ドライブネットクレイドル SPX-SC01  と F-10D (3) その後

と・・・ 全く同じ症状じゃん。www 

なので、

クレイドルの電源を先にいれて、その後F-10DのBluetoothを有効にするという手順ならば、ドライブネットアプリでクレイドルの接続を認識するまでの時間は相当かかるが(クレイドルからピポッと音がなってから、アプリ画面で認識を確認出来るまで3分近くもかかっている!)どうにか、毎回自動認識、接続するようになった。

というのがキモらしい。もしクレイドルをリセットしてもダメならば、これを覚えておくことにしよう。

fscanfを使おうとすると、「fscanf_sを使え」と怒られる件。

例えばグローバルでこういうの宣言して、

char names[100][40];
char numbers[100][40];


こういうのを作った時、

void load(void){
FILE *fp;
errno_t errno;

if ((errno = fopen_s(&fp, "phone", "r")) != 0){
printf("ファイルを開けない\n");
printf("%d", errno);
exit(1);
}

loc = 0;
while (!feof(fp)){
printf("%s%s", names[loc], numbers[loc]);
fscanf_s(fp, "%s%s", names[loc], 40, numbers[loc], 40);
loc++;
}
fclose(fp);
}


fscanf_sのパラメータで、各変数の後にその大きさ(赤字で書いたもの)を入れないと、コンパイルは通るが実行時エラーで落ちる。

*** fscanf_s だけでなく、gets_s / strcpy_s(これはコンパイルも通らない)も同様。

if ((from=fopen(argv[1], "r")) == NULL)
みたいな文が書いてあるCの本の例題をVisual Studio 2013に入れてみると、「fopenは使うな、fopen_sを使え」みたいなふうに怒られる。さらに、argc, argv[]が出てくると、どうしたものか迷う。

1. argc, argv[]=コマンドライン引数の入れ方
コマンドライン引数指定
みたいに、プロジェクトのプロパティのデバッグのコマンド引数に入れる。

で、実行してみてもエラーになる。結局、デバッグモードでのコマンドライン引数指定は.exeファイルと同じ場所ではダメだった。ここに入れなくてはいけない。
argv対象ファイルの場所
consoleappication5の下の、consoleappication5のフォルダで、かつDebugフォルダの上。これを発見するには、一旦fopen_sのパラメータを"w”にして実験してみる必要がある。


2. fopen_s騒動
こことかここに書いてあるけど、初心者がいきなりそれを見てもわからない。

要するに、

int main(int argc, char *argv[])
{
FILE *from, *to;
char ch, watch;
errno_t errno;

/*コマンドライン引数の数確認*/
if (argc < 3){
printf("引数だめだよ\n");
exit(1);
}

/*コピー元ファイルを開く*/
if ((errno = fopen_s(&from, argv[1], "r")) != 0){
printf("コピー元ファイルを開けない\n");
printf("%s\n", argv[1]);
printf("%d", errno);

exit(1);
}

/*コピー先ファイルを開く*/
if ((errno = fopen_s(&to, argv[2], "w")) != 0){
printf("コピー先ファイルを開けない\n");
printf("%s\n", argv[2]);
printf("%d", errno);

exit(1);
}

if (argc == 4 && !strcmp(argv[3], "watch"))
watch = 1;
else
watch = 0;

/*ファイルをコピー*/
while ((ch = fgetc(from)) != EOF){
fputc(ch, to);
if (watch) putchar(ch);
}
fclose(from);
fclose(to);


の青字みたいにすれば動く。赤字みたいなのを加えておくと動作確認できる。

このページのトップヘ