- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:34:33 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 19 pc11.2ch.net/test/read.cgi/tech/1190342593/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
- 855 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:10:11 ]
- >>853
1行が何バイトかは、その行を読み込んで改行まで数えないとわからないのが普通
- 856 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:10:58 ]
- >>853 オイオイw
- 857 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:20:44 ]
- でも、データをストリームとして扱うようになったのはUnix以降じゃなかったか?
だからそれ以前の人ならそういう発想でも別に変でないかも。
- 858 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:51:46 ]
- 何とかできました。
>>855 普通はそうなのですか…結構アナログな感じなのですね ただ、すんません。疑問が増えました。 データをストリームとして扱う、の意味がわかりません
- 859 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:57:10 ]
- >> 850
現在位置を取得し、これをAとします。 getsを4回呼び出します。 現在位置を取得し、これをBとします。 fseekで現在位置をAの場所に戻します。 fseekB-Aバイト分現在位置を進めます。
- 860 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:58:30 ]
- >>858
「データをストリームとして扱う」というのは、普通にファイルを頭から順に読んでいくこと。 これに対して、「固定長のブロックとして扱う」やりかたがあって、 ひとつひとつのカタマリが同じ大きさの場合に、 fseekを使ってデータの開始位置にシークして、必要なデータのみを直接読み書きすることを言います。
- 861 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:24:43 ]
- >>859-860
ありがとうございました。 今まで何も理解せずにプログラムしてたのだと思い知りました。。。
- 862 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:41:45 ]
- KOUZOUTAI data[num];
と KOUZOUTAI *data data = (struct Point *)malloc( sizeof(struct Point) * num ); の違いって何なのでしょうか? どちらもnum分の構造体を確保していると思うのですが。 それとポインタの場合で二次元の構造体を確保する方法教えてください。
- 863 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:42:36 ]
- >>862
すません。 4行目はPointじゃなくて KOUZOUTAIです。
- 864 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:59:04 ]
- int data[10]
と int *data = (int *)malloc(sizeof(int)*10) の違いと同じ。
- 865 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:00:33 ]
- 質問です。
ファイルの更新時刻を得るのってどうすればいいんでしょうか?
- 866 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:01:13 ]
- OS次第
- 867 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:07:28 ]
- 右クリック → プロパティ
- 868 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:17:23 ]
- >>866
標準ライブラリにそういう関数が入ってたりしないってことでしょうか
- 869 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:23:21 ]
- >>868
ファイルシステムに依存する情報なんで、標準には入ってない
- 870 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:23:32 ]
- >>864
んー その、構造体で宣言するのと、ポインタで宣言するのと利点があまりわからず あと2次元の構造体をポインタで確保する方法もお願いします
- 871 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:27:14 ]
- まず「二次元の構造体」を詳しく。
構造体の二次元配列をポインタで確保するのなら、普通の変数を二次元に確保するときと同様でいい。
- 872 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:28:40 ]
- スコープを跨ぐことができない・できるの違いぐらいじゃない?
あと、後者の方が前者と比べると遅そうだけど、これは実装・環境に依存するのかな。
- 873 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:34:47 ]
- >>871
KOUZOUTAI data[10][10] のようなことです。 二次元配列をポインタで確保するやり方調べてきます。やったことなくて。 >>872 なるほど。 というと、グローバルでKOUZOUTAI data[10]とするのと同じような感じになるのでしょうか?
- 874 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:49:42 ]
- KOUZOUTAI (*data)[10]
- 875 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:25:23 ]
- struct e{
int value; }; int main(){ struct e **p,(*q)[5]; int i; //こんな方法とか p = (struct e**)malloc(10 * sizeof(struct e*)); for(i=0; i<9; ++i){ p[i] = (struct e*)malloc(5 * sizeof(struct e)); } //こんな方法がある q = (struct e(*)[5])malloc(5 * 10 * sizeof(struct e)); //こんな風に使う p[0][0] = 0; q[0][0] = 0; //忘れずに解放 for(i=0; i<9; ++i){ free(p[i]); } free(p); //qの方が解放は楽 free(q); return 0; }
- 876 名前:875 mailto:sage [2007/11/03(土) 23:26:22 ]
- 繰り返し部分間違えた
for(i=0; i<9; ++i) ↓ for(i=0; i<10; ++i)
- 877 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:38:36 ]
- **ばっかりでわかりにくいなぁ。
- 878 名前:デフォルトの名無しさん [2007/11/03(土) 23:42:07 ]
- だいぶはしょりますが・・・
int i; char b; char a[] = "abcdefg"; scanf("%s",&b); while(b != a[i]) i++; ・・・略 みたいなbで打たせた文字をaの配列から探させるようなプログラムを書くとwhile文のところで、 「char型はchar*型に変換できない」 というエラーが出ます。どうすればbの文字ををaの配列から参照できますか? わかりにくくてごめんなさい
- 879 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:46:27 ]
- >>878
>534の下3行。
- 880 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:49:25 ]
- >>878
とりあえずそのようなエラーは出なかった
- 881 名前:デフォルトの名無しさん [2007/11/03(土) 23:50:30 ]
- >>879
ありがとうございます。%cにすればいいってことですか…?
- 882 名前:デフォルトの名無しさん [2007/11/03(土) 23:56:23 ]
- 878ですが、エラーはでなくなったのですがどうやらwhileで無限ループがおきている気がします。
上のプログラムだと、例えばscanfでdを打ったらiが3になった時点でwhile文から出るはずですよね?
- 883 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:57:23 ]
- iを0で初期化してる?
- 884 名前:デフォルトの名無しさん [2007/11/04(日) 00:01:00 ]
- >>883
しています。無限ループではなく他のどこかがおかしいのかもしれません。 もう一度しっかり見てみます。 ありがとうございました。
- 885 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:03:57 ]
- >>884
bにhを入れたらどこで止まると思う?
- 886 名前:デフォルトの名無しさん [2007/11/04(日) 00:06:17 ]
- >>885
そうなると無限ですか? でも実際はこの配列はa〜zで、cとかdとかを入れても次の動作にいきません。
- 887 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:08:04 ]
- whileに入る前にbに入ってる文字をprintfで確認したか?
- 888 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:08:12 ]
- 出来る限り、はしょらないで載せてくれ
>>883みたいな細々したことを指摘しないといけなくなるから
- 889 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:08:54 ]
- >>886
その実際のソースを書け
- 890 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:12:11 ]
- >>878のソースで「char型はchar*型に変換できない」というエラーが出るというのが気になるんだが……
scanfの%指定ミスでこんなエラー出ないよな? せいぜい実行時エラーであって
- 891 名前:デフォルトの名無しさん [2007/11/04(日) 00:15:44 ]
- ごめんなさい
#include<stdio.h> int main(void){ char a; char letter[] = "abcdefghijklmnopqrstuvwxyz"; int i = 0; printf("半角英小文字を1文字入力。:"); scanf("%s",&a); while(a != letter[i]) i++; printf("%s",letter[i]); return 0; } です。
- 892 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:18:27 ]
- scanf指摘されたところ直ってないじゃん
- 893 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:20:18 ]
- >>891
%sを%cに置換してこい。printf("%s",letter[i]);文字コードがポインタだと解釈されてしまう
- 894 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:20:29 ]
- returnの位置
- 895 名前:デフォルトの名無しさん [2007/11/04(日) 00:22:40 ]
- >>892
>>893 ありがとうございます。 >>894 何か場所おかしいですか?
- 896 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:23:01 ]
- >>892
直す前のを載せたんじゃないの? >>891 printf("%s",letter[i]); ↓ printf("%c",letter[i]);
- 897 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:23:21 ]
- バッファオーバーラン
- 898 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:26:45 ]
- >>897
- 899 名前:デフォルトの名無しさん [2007/11/04(日) 00:32:21 ]
- みなさんありがとうございます。
おかげでなんとかできました。 1つ気になるのですが"%c"と" %c"の違いはなんですか?
- 900 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:04:58 ]
- >>899
%cと%sの違いなら、 ・scanfの場合 %cなら、引数として渡されたアドレスの指し示す先に、標準入力からとってきた一文字を入れる %sなら、引数として渡されたアドレスの指し示す先を配列の頭と見て、文字列を入れていく。最後に\0を付加 ・printfの場合 %cなら、引数として渡された数値に対応した一文字を標準出力に出力 %sなら、引数として渡されたアドレスを配列の頭と見て、その指し示す先を\0にぶち当たるまで出力する
- 901 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:10:39 ]
- ' '
- 902 名前:デフォルトの名無しさん [2007/11/04(日) 01:22:51 ]
- >>900
ありがとうございます。 よくわかりました!
- 903 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:02:07 ]
- ところで、何が出来れば入門を卒業したことになるの?
- 904 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:25:43 ]
- 言語の文法マスターしたぜ!もう学ぶことねぇwwww
↓ え・・ポインタのポインタ?関数ポインタ?どうだったっけ? ↓ まだまだだな俺 ←この辺から入門卒業
- 905 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:07:39 ]
- >>904
それ面白いなw 初心者に教えてるつもりが逆に初心者から教わってることに気付いたあたりも入門卒業っぽいぜ。 もう一歩踏み込む気構えが出来た頃合がそうなのかもね。
- 906 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:37:37 ]
- >>904
俺的にはそこで、宣言の問題だと気がついたら卒業としたい。
- 907 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:44:38 ]
- 「このスレ卒業テスト」と称して課題を出せばいいんじゃね?
- 908 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:29:28 ]
- CでGUIアプリを作れたら入門者卒業
- 909 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:42:34 ]
- >>908
んなわけあるか
- 910 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:57:44 ]
- >>908
コピペで終わりじゃねーかw
- 911 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 14:17:19 ]
- ポインタが理解できたら入門者卒業
- 912 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 14:24:09 ]
- ポインタも
*****pくらいついたらわけがわかりません。 const ***p ***const p とかなったらわかりません 関数ポインタなんて使ったことありません。なんで使うんですか。 GUIなんて作ったことなんてありません でも入門卒業したいです><
- 913 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 14:57:08 ]
- 関数ポインタの使い道が分からないなら卒業は無理だな
- 914 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 15:13:41 ]
- 関数ポインタは便利だけど、あまり使うことはないですよ。
私は、DLLを使うときくらいですかね。
- 915 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 15:17:29 ]
- 卒業せんでも中退すれば
- 916 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 15:37:45 ]
- typedef struct
{ char *str; int (*myfunc)(); } object; int main() { object obj; obj->str = malloc(sizeof(char) * 256); fgets(obj->str, 256, stdin); obj->myfunc(); puts(obj->str); free(obj->str); return 0; } int myfunc() { 〜 }
- 917 名前:915 mailto:sage [2007/11/04(日) 15:38:59 ]
- >>916
×object obj; ○object *obj;
- 918 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:23:53 ]
- >>916
え、そんなやり方でmyfuncを呼び出せるの? いつ関数ポインタをセットした?
- 919 名前:916 mailto:sage [2007/11/04(日) 16:28:35 ]
- >>918
あー忘れてた。 obj->myfunc(); の前に、 obj->myfunc = myfunc; が必要だった。あかんね。
- 920 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:54:01 ]
- #include <stdio.h>
int main(void) { int c; c = getchar(); printf("%d\n", c); c = getchar(); printf("%d\n", c); return 0; } このプログラムをBCC5.5.1でコンパイルして実行し、"a"と"Ctrl+Z"を1度に入力した場合、 D:\c\my\test2>test2.exe a^Z 97 -1 このような結果になりました。 ところが、VC++2005EEのcl.exeでコンパイルし、同じように実行すると、 D:\c\my\test2>test2.exe a^Z 97 26 このような結果になります。なぜVC++20005では正しい結果が得られないのでしょうか。
- 921 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:59:04 ]
- fflush(stdout);
これを main の return の前に。
- 922 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:06:20 ]
- *p (*p)
の違いがわかりません><
- 923 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:07:39 ]
- あっそ
- 924 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:08:00 ]
- 教えてください><
- 925 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:10:33 ]
- >>920
stdinの初期設定が違うんじゃね? ^C が受けられるかどうかの設定もできるし。 あるいは ^D とか。
- 926 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:10:56 ]
- >>922
1+2 と (1+2) の違いを考えてみるといいよ
- 927 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:17:19 ]
- >>926
ありあとやんしたー
- 928 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:44:16 ]
- >>920
コレってマジ? なんで今更こんなバグが残ってんの?
- 929 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:52:38 ]
- >>921
そのようにしても結果は変わりませんでした。 >>925 どうやって設定すればいいのでしょうか?
- 930 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:11:13 ]
- >>928
うちでも確認できた。これはひどいな。
- 931 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:22:15 ]
- そこは仕様では決められてない部分だから、
バグだとか、どっちが間違ってるとかでは無いんじゃね?
- 932 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:55:34 ]
- >>931
でも、stdio.hでは#define EOF (-1)となっているし、^Zだけならちゃんと-1と表示される。
- 933 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:55:14 ]
- そうじゃなくて EOF の前に一応 ^Z も発行するかどうか。
- 934 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 21:57:55 ]
- >>921
プログラム終了時に、標準入出力もふくめてファイルは全部フラッシュ&クローズされるから、 それは意味ない。
- 935 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:20:44 ]
- num[4][5]={
{0,1,2,3,4}, {5,6,7,8,9}, {10,11,12,13,14}, {15,16,17,18,19} }; 関数に配列の{5,6,7,8,9},とかを1行だけ送りたいのですが どういう風にやればいいのでしょう?
- 936 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:41:03 ]
- 送るだけならnum[1]とかを渡すだけ。
- 937 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:59:13 ]
- EOFについて。
MSのドキュメント調べたけど、記述が見つからなかったので仮説。 てゆーか、コマンドプロンプトの制御文字に関する仕様のドキュメントてどこさ? 行頭にある^Zはコマンドプロンプトが解釈してプログラムに「データ無し」を通知する。 行中にある^Zは文字「0x1A」をプログラムに通知する。 という理由で>>932な動きをするっぽい。 ここはコマンドプロンプトの仕様だと思うんだけど、文献ミツカンネ。 stdinをバイナリモードで開くと同じ挙動をするので、 テキストモードでのデータ中の0x1A(制御コードのEOF)の扱いの差のようだ。 バグというよりは仕様の範疇っぽいね。 0x1Aを含むファイルをテキストモードでオープンして読んでみれば もうちょい分かりそうなんだけど、データ作るのめんどかったんで誰か頼む。 ○ バイナリで開き直したサンプル #include <stdio.h> int main() { int c; freopen("CON", "rb", stdin); do{ printf("%d\n",c = getc(stdin)); }while(c != EOF); return 0; }
- 938 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:10:31 ]
- >>936
受け取る方を1次元にしてやれば、まとめて受け取られるんですね。 できました!ありがとうございました!
- 939 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:18:03 ]
- >>937
VC++2005でもファイル中の0x1Aは、getcで読んだらEOFが返ってきた。 やっぱバグじゃねーの?
- 940 名前:デフォルトの名無しさん [2007/11/04(日) 23:24:30 ]
- Turbo Explorer
無償のアプリケーション開発環境 www.forest.impress.co.jp/lib/stdy/program/progdevenv/turboexplor.html
- 941 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:27:37 ]
- むぅ…すんません
今度は num[4][5]={ {0,1,2,3,4}, {5,6,7,8,9}, {10,11,12,13,14}, {15,16,17,18,19} }; の 0 5 10 15 の縦の列の総和を出したいだけなんですが これも丸々関数に送りたいのです。。。 1次元配列にいっそのこと退避させたほうがいいんでしょうか
- 942 名前:デフォルトの名無しさん [2007/11/04(日) 23:36:02 ]
- numごと渡して計算せよ
- 943 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:42:07 ]
- numがココでは小さいんですが
1000×1000と大きい場合を想定しています。 numごと渡したら、メモリがムダに消費されるとかポインタの解説ページとかで見た気がして
- 944 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:44:37 ]
- それならなお更numを渡せ
- 945 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:44:40 ]
- numごとって、本当に渡すわけじゃないぞ。アドレス渡すだけだから。
- 946 名前:デフォルトの名無しさん [2007/11/04(日) 23:47:36 ]
- >>941
一次元配列を使うと32*1000バイト消費するが そのままだと何も新規に生成しないから0バイトで済む
- 947 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:50:24 ]
- 何かもう一個同じモノが作られるっぽいことが書いてあって、怖気づいてました。
ところでnumそのものの値も更新したい場合は、参照渡しするのですよね?
- 948 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:51:17 ]
- 本当にnumそのものの値を変更したいのか?
- 949 名前:デフォルトの名無しさん [2007/11/04(日) 23:53:11 ]
- C言語はふつうにやると配列は参照渡しになる
コピーを渡す方は難しい
- 950 名前:デフォルトの名無しさん [2007/11/04(日) 23:57:50 ]
-
クソの集まり創価学会 偽善者が政治活動、公明党 キチガイ集団が政治活動、公明党 池田狂信ネズミ講が政治活動、公明党 騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
- 951 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:10:49 ]
- >>948-949
すみません。。。混乱してきてしまって。 今は総和だけ求めてるのですが やりたいのは行で計算をして、その行の値を全部更新して その更新された状態で列を計算して、全部の列を更新するということをしようとしてます。 配列と関数の関係をやりなおしてきます。
- 952 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:31:26 ]
- >>951
それならなおさらアドレス渡しでいいじゃん
- 953 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:38:26 ]
- >引数の引き渡しには,値渡しと参照渡しがある.
>C言語では,特別なことをしない限り,変数は値渡し,配列は参照渡しになる 今まで配列も値渡しだと思っていました…納得できました。 ありがとございましたー
- 954 名前:920 mailto:sage [2007/11/05(月) 11:44:12 ]
- 検証してくださった方、ありがとうございます。
#include <stdio.h> int main(void) { int c; do { printf("%d ", c = fgetc(stdin)); } while (c != EOF); return 0; } このプログラムを実行し、 コマンドラインから"abc^Zdef"を入力すると、(^ZはCtrl+Z) D:\c\my\test5>test5.exe abc^Zdef 97 98 99 26 と表示され、入力待ちになります。
- 955 名前:920 mailto:sage [2007/11/05(月) 11:44:52 ]
- それに対して、
61 62 63 1A 64 65 66 の内容のテキストファイル(↑は16進ダンプしたもの)をstdinにリダイレクトして 実行してみたところ、 D:\c\my\test5>test5.exe < test.txt 97 98 99 -1 このような結果になり、プログラムが終了しました。 プログラムは全てVC++2005でコンパイルしました。 どうやらコマンドラインの行中にEOF(0x1A)があった場合、 stdio.hで定義されたEOF(-1)ではなく、 テキストファイルでのEOF(0x1A)として読み込むようです…。 BCC5.5.1ではどちらの場合も、 97 98 99 -1 と表示され、プログラムが終了します。
|

|