- ベストアンサー
DOSでメモ帳を開いても改行されない・・
プログラムを作ってDOS窓でメモ帳を開けるようにしたのですが、改行ができません。 プログラムからメモ帳を開いた場合¥nは検知してくれないのでしょうか? どのようにプログラムを組めばいいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テキストファイルを新規作成モードでオープンしていると思いますが、オープンモードに「テキスト属性」を付けてありますか? fp = fopen(filename,"w"); を fp = fopen(filename,"wt"); にしてみましょう。 MS-DOS、WINDOWSの世界では、改行は「CR文字+LF文字」の2文字が連続した時のみ、改行と認識されます。 ところが、C言語、C言語が開発されたunix系の世界では、改行は「¥n」1文字のみです。 この違いを吸収する為、ファイルのオープンモードに「バイナリ」「テキスト」の属性が設けられ、Cライブラリ関数が「テキストモードの時は、見えないところでコッソリと『¥n』1文字を『CR+LF』2文字にしてファイルに書き出し、『CR+LF』2文字を『¥n』1文字にしてファイルから読み込み」と言う事をして、unix系の改行とDOS系の改行を同じように扱えるようにしています。 つまり「unixで動いてたプログラムのfopenの属性に"t"を足すだけでDOSで動くようにした」と言う事なのです。 逆に言うと「fopenの属性に"t"を付け忘れるとDOSで動かない」と言う訳。
その他の回答 (1)
- mac_res
- ベストアンサー率36% (568/1571)
コンパイラの名前と作ったプログラムはどんなものでしょうか?下記のものなら多分動くと思います。VC++6で試験しました。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <windows.h> #include <stdio.h> #include <errno.h> int main(void) { FILE *fo; HINSTANCE ret; if ((fo = fopen("test.txt", "wt")) == NULL) { fprintf(stderr, "Can't open test.txt"); return(errno); } fprintf(fo, "This is test.\nIs it all right?\n"); fclose(fo); ret = ShellExecute(NULL, "open", "notepad.exe", "test.txt", NULL, SW_SHOW); return 0; }