プロが教えるわが家の防犯対策術!

プログラムを作ってDOS窓でメモ帳を開けるようにしたのですが、改行ができません。
プログラムからメモ帳を開いた場合¥nは検知してくれないのでしょうか?
どのようにプログラムを組めばいいでしょうか?

A 回答 (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で動かない」と言う訳。
    • good
    • 0

コンパイラの名前と作ったプログラムはどんなものでしょうか?下記のものなら多分動くと思います。

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;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!