- ベストアンサー
stdoutとstderr
どうして下記のソースの実行結果が"ba"となってしまうのでしょうか? ("ab"とならない事を言っています) 皆さん宜しくお願いします<(_ _)> int main(void) { fprintf(stdout,"a"); fprintf(stderr,"b"); return 0; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- koma1000nin
- ベストアンサー率30% (342/1133)
関連するQ&A
- stderrとstdout
次のようなプログラムを、./a.outと./a.out>out.txtのように実行したところ、前者は output1 後者は output1 output2 output3 のようになりましたが、なぜこうなるか理由がわかりません。 自分では、stderrとstdoutが関係してるのだと思うのですが、初心者なのでこれらがどういうプログラムなのかもよくわかっていません。どなかなぜこうなるのか教えていただけないでしょうか。 #include<stdio.h> int main(int argc,char **argv){ fprintf(stderr,"output1\n"); fprintf(stdout,"output2\n"); printf("output3\n") }
- ベストアンサー
- C・C++・C#
- hello worldの表示の仕方
2年ほど前、プログラムを教わっていたのですがすっかり忘れてしまいました メモ帳に #include <stdio.h> int main() { fprintf(stdout, "Hello world No1!\n"); fflush(stdout); fprintf(stderr, "Hello world No2!\n"); fflush(stderr); return 0; } と書く helloworldという名前で保存する アクセサリからコマンドプロンプトを立ち上げる helloworldと入力しエンターを押す これでhello wordと表示されると思うのですが、何故か表示されません 初歩の初歩すらすっかり忘れてしまいました どなたか何を間違えているのか教えてください 昔はこのPC実行できたと思うのですが…ちないにvistaのノートパソコンです お願いします
- ベストアンサー
- その他(インターネット・Webサービス)
- パイプってどうやって使うの?
1つ目のプログラムの出力を2つ目のプログラムで受け取りたいのですが、どうすればいいですか? -- 1 -- #include <stdio.h> #include <windows.h> int main(void){ int a=0; while(1){ fprintf(stdout,"%d\n",a++); Sleep(1000); } return 0; } これを2のプログラムで受け取ります。 #include <stdio.h> int main(void){ char str[128]; while(1){ if(fgets(str,sizeof(str),stdin)==NULL) break; printf("%s",str); } return 0; } これをコマンドプロンプトで 1 | 2 と入力してみましたが、何も表示されません・・。 個別に実行すると正常に動作します。 環境はXPです。どうしたら受け渡しが出来るのでしょうか?
- 締切済み
- C・C++・C#
- stdin,stdoutについて
C言語を学び始めたものです stdin・stdoutがどのように機能するか分かりません またstdoutはどこに出力しているんですか #include <stdio.h> int main(void) { char ch; while(!feof(stdin)) { scanf("%c", &ch); if(!feof(stdin)) printf("%c", ch); } return 0; } このプログラムは「コンソール」入出力関数だけを使用しテキストファイルの内容を別のテキストファイルにコピーするプログラムだそうですがどのテキストファイルの内容をどこのテキストファイルにコピーしているんですか?stdin・stdoutの機能が全く分かりません。 どなたか分かる方、回答お願いします。
- 締切済み
- C・C++・C#
- グローバル変数について
◎1--------------------------------- #include<stdio.h> void func(void); int glb; int main(void) { int a=20; glb=30; printf("main a=%d glb=%d\n",a,glb); func(); return 0; } void func(void) { int b=88; printf("func b=%d glb=%d\n",b,glb); } ------------------------------------- ◎1の実行結果----------------------- main a=20 glb=30 func b=88 glb=30 ------------------------------------- ◎2--------------------------------- #include<stdio.h> void func(void); int glb; int main(void) { int a=20; func(); printf("main a=%d glb=%d\n",a,glb); return 0; } void func(void) { int b=88; int glb=30; printf("func b=%d glb=%d\n",b,glb); } ------------------------------------- ◎2の実行結果----------------------- func b=88 glb=30 main a=20 glb=0 ------------------------------------- 以上2つのプログラムで、◎1は参考書を参考に作成したものです。 ◎1のプログラムで、グローバル変数glbの値をmain( )関数内で設定していたので、次に◎2のようにfunc( )という関数プロトタイプ内で、グローバル変数glbの値を設定し、main( )関数内のprintf文でも表示させようと思ったら、「glb=0」となってしまいました。 なぜこのようになってしまうか、教えてもらえたら嬉しいです。
- ベストアンサー
- C・C++・C#
- プログラムがわかりません
C言語の本を読んでいるんですが、詰まってしまいました。プログラム自体は単純なのですが #include<stdio.h> void hello(void) { fprintf(stderr,"hello!\n"); } void func(void) { void *buf[10]; static int i; for(i=0;i<10;i++) { buf[i] = hello; } } int main(void) { int buf[100]; func(); return 0; } のスタックオーバーフローのプログラムです。 1. 要素100のint型配列を宣言 2. 関数funcの呼び出し 3. void *buf[10]; まずここでがわかりません。なぜポインタが でてきたのか?またbufの要素数は100では? 4. buf[i] = hello; のループ これもわかりません。配列に関数を代入しているのでしょうか? 5. fprintf(stderr,"hello!\n"); これもまたわかりません。 fprintfの最初の引数は出力先ですが、なぜ標準エラー出力なの でしょうか? 時間のあるかた解説お願いします。
- ベストアンサー
- C・C++・C#
- C言語でO-Notepad-x,文字化け。
いつも大変お世話になりありがとうございます。 標記の件。 ボクはTeraPadをエディターに使っています。 コードとコンパイル、実行がおかしくなりました。 コードと実行は下記の通りです。 #include <stdio.h> int main(void) { int a = 0; int b = 0; b = a++; printf("代入後にインクリメントしたのでbの値は%dです。\n", b); return 0; } C:\MinGW>gcc test1.c -o test1 C:\MinGW>test1.c 実行するとO-Notepad-xと言うのが起ち上がって #include <stdio.h> int main(void) { int a = 0; int b = 0; b = a++; printf(" ɃC N g ̂ b ̒l %d ł B\n", b); return 0; } という結果になりました。 どうしてでしょうか? ご回答の程、宜しくお願い申し上げます。
- ベストアンサー
- C・C++・C#
- オープンモードについて
この下のソースを実行するとファイルの中身が「97へ」と出ます。 この「へ」とは何なのでしょうか?97にしたいのですが、どうすればよいのでしょうか?またなぜこのような結果になってしまったのでしょうか? int main(void) { FILE *fp; int d=97; fp=fopen("txt.txt","w+"); fprintf(fp,"%d",d); fscanf(fp,"%d",&d); printf("%d",d); fclose(fp); return 0; } 環境はVCC++2005です。
- 締切済み
- C・C++・C#
- staticで初期化した変数(?)を使って初期化
次の3つのプログラム、1番目はコンパイルエラーになりますが、下2つはエラーになりません。1番目のプログラムのエラーメッセージ:初期化子が定数ではありません。 処理系にかかわらずそうだとしたら、その理由はなんでしょうか。 ---------------------------------- int main(void) { static int a=5; static int b=a; return 0; } ---------------------------------- int main(void) { static int a=5; int b=a; return 0; } ---------------------------------- int main(void) { int a=5; int b=a; return 0; }
- ベストアンサー
- C・C++・C#
- 多次元配列の new 2
追加の質問ですみません^^; char の8個の配列へのポインタの配列を new する場合などは、以下のサンプルのように typedef しないとかけないんでしょうかね?たとえば、 char (**bb)[8] = new (char (*)[8])[8]; 書きたいように思いますが、これは文法違反ですし・・・^^; ==== サンプル:(iostream の初期化時に、定義した new が呼び出されるかもしれないことを一応考慮して、stdio の関数を使っています^^) #include <new> #include <stdlib.h> #include <stdio.h> void *operator new(std::size_t s) { void *p = malloc(s); fprintf(stderr, "::new(): %p\t%lu\n", p, (unsigned long)s); return p; } void operator delete(void *p) { fprintf(stderr, "::delete(): %p\n", p); if (p) free(p); } void *operator new[](std::size_t s) { void *p = malloc(s); fprintf(stderr, "::new[](): %p\t%lu\n", p, (unsigned long)s); return p; } void operator delete[](void *p) { fprintf(stderr, "::delete[](): %p\n", p); if (p) free(p); } int main() { typedef char (*T)[8]; char (**b)[8] = new T[8]; delete[] b; } ==== % ./a.exe ::new[](): 0x6e01b0 32 ::delete[](): 0x6e01b0
- ベストアンサー
- C・C++・C#
お礼
有り難う御座います、仰るとおりfflushを用いてバッファのフラッシュを意図的に行う事で解決しました。 ご自身でも試して頂くなど手間暇かけて頂き本当に有り難う御座いました<(_ _)>