• ベストアンサー

超初心者ですが・・・。

何をバカな質問してるんだと思われるかも知れませんが、最近C++を学び始めたばかりなのでわからないのです。(本・その他いろいろなサイトを見て回りましたがいまだにわかりません。) 1.#include<iostream>と#include<iostream.h>の違い? 私が購入した本では前者の方で記述されていますが、プログラミング関係のサイトでは必ず後者の方の記述がされてますが、果たして違いはあるのでしょうか? 2.例えば void main(){ char c[11]; cout <<"貴方の名前は?"<<endl; cin >> c; cout << c <<"さんですね。"<<endl; } の場合、char c は10文字(日本語5文字)までが入るということですよね? でも実行して、10文字以上記入しても問題無く10文字以上表示されるのですがなぜなのでしょう?(borland5.5コンパイラで) ちなみにVC++でトライしてみたら、「重要なエラーが発生しました。マイクロソフトに連絡を~」といった エラーメッセージが表示されます。 こんな初めてつまづくと先が思いやられますが、完全に把握しないと先に進まないといった性格ですので、この2点お分かりの方、宜しくお願い致します。

  • deia
  • お礼率56% (69/122)

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

1. C++の(比較的)新しい仕様であるネームスペース(=名前空間)に関連します。 詳しいことをここでダラダラ書くよりも「C++ 名前空間」で検索した方が有益な情報が得られるでしょう。 結論だけ言うと「比較的新しいコンパイラではiostream.hではなくiostreamが推奨される」。 2. メモリ管理の方式の違いが実行結果に出ているのでしょう。 11バイトの領域に対して11バイト以上のデータを格納した場合の挙動は定義外です。 よって、実行結果は処理系(環境とコンパイラ)に依存します。 やってはいけないことをやった結果ですから、素直にエラーを出すVC++の方が好ましい結果だと言えます。 しかし、処理系依存ですからBC++の結果が“あきらかな間違い”とは言えません。

deia
質問者

お礼

回答ありがとうございました。 また何かありましたら宜しくお願い致します。

その他の回答 (1)

回答No.1

1.まず#includeとはそこに指定したファイルを埋め込む命令です。  つまり「"iostream.h"というファイルをそこに埋め込みなさい。」  と言う意味です。  なので"iostream"というファイルがあれば間違いではありませんが、  通常ヘッダーファイルを読み込むのであれば、  拡張子".h"が付いた"iostream.h"ですね。 2.char c[11];とした場合、  半角文字11文字が格納されます。  ⇒文字列の場合NULLを入れるので10文字が望ましいですが…。  それを超えた場合はコンパイラによってエラーとされるか、  強制的にメモリのどこかに書き込まれます。  いわゆるアクセスバイオレーションを引き起こす原因となります。

deia
質問者

お礼

回答ありがとうございました。 また何かありましたら宜しくお願い致します。

関連するQ&A

  • stringクラスのオブジェクト

    C++にて下記のソースをVC++にてコンパイルすると「'string'定義させていない識別子です。」などどエラーがでてしまいます。BC++では何も問題ないのですが・・・。なぜなのでしょうか? #include <iostream.h> #include <string.h> void main(){ string s; cout << "貴方の名前は?" <<endl; cin >> s; cout << s <<"さん、こんにちは"<<endl; }

  • 初心者です。エラーが分かりません。

    エラーが二つ出てしまいます。 自分ではよく分からなく、図々しく質問しました。 誰か助けてください。 #include<iostream> using namespace std; double fan(double,double angle=360.0); /* angleはデフォルト360 */ double fan(double r, double angle){ return 3.1415926*r*r*angle/360.0; /* 面積を返す */ } int main(void){ double r,angle; cout << "半径を入力してください。 : "; cin >> r; cout << "角度を入力してください。 : "; cin >> angle; cout << "半径 : " << r << " 角度 : " << angle << endl; cout << "面積 : " << fan(r,angle) << endl << endl; cout << "半径 : " << r << " の円なら" << endl; cout << "面積 : " << fan(r) << endl; return 0; }

  • getlineについて

    現在getlineを用いてプログラムを作成しようとしているのですが、例えば #include <iostream> using std::cin; using std::cout; using std::endl; int main(){ char buffer[81]; while(!cin.eof()){ cin.getline(buffer,sizeof(buffer)); cout << buffer << endl; while((!cin.eof())&&cin.fail()){ cin.clear(); cin.ignore(80,'\n'); } } return 0; } というプログラムを作った場合、標準入力から各行を80文字だけ読み込み出力をするわけなんですが、 この80文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

  • プログラムの動作

    10文字をスキップするプログラムなのですが、どのようにスキップしているのかわからないので教えてください。 下にソースコードを書きます。 #include <iostream> using namespace std; //10文字をスキップする istream &skipchar(istream &stream) { int i; char c; for(i=0; i<10; i++)stream >> c; return stream; } int main() { char str[80]; cout << "いくつかの文字を入力する:"; cin >> skipchar >> str; cout << str << endl; return 0; } よろしくおねがいします。

  • 文字列の処理

    #include <iostream.h> main(){ char x[1]; //ここで あいうえお という5文字を入力 cin >>x; ? } ↑いうえ という文字を cout << で表示するにはどうしたらいいんですか?

  • 下記、プログラム内の「char *」の役割

    C++初心者です。 縦長になってしまいますが、 『 #include <iostream.h> void show(int); void show(double); void show(char *);   ←左記の記述の使い方 int main(void) { show(1); show(0.25); show("文字列"); return 0; } void show(int x) { cout << x << endl; } void show(double y) { cout << y << endl; } void show(char *z) { cout << z << endl; } 』 のプログラムにおいて、「char *」の使い方がいまいち理解できません。 上記プログラムですとエラーが表示されないのですが、下記のプログラムだとエラーが発生します。 『 #include <iostream.h> void show(int); void show(double); void show(char);   //←---------上記と違う行 int main(void) { show(1); show(0.25); show("文字列"); return 0; } void show(int x) { cout << x << endl; } void show(double y) { cout << y << endl; } void show(char z) {  //←---------上記と違う行 cout << z << endl; } 』 なぜ、ポインタ(*)を付けないといけないのか分かりやすく教えていただけましょうか。

  • C++の関数

    関数の課題が出たんですが分からないので教えてください。 第1引数と第2引数はchar型の1元配列であり、これら2つの配列(文字列)を連続して表示する関数catstringがあるものとする。 ただし第2引数にはデフォルトの文字列"あいうえお"が設定されている。main関数からキーボード入力で2つの文字列を取得し、 catstringの第1引数のみに文字列が渡される場合と第1、2引数ともに文字列が与えられるプログラムを作成せよ。 やってみましたがエラーが出てしまいます。 #include <iostream> #include <cstdlib> using namespace std; char catstring(char,char="あいうえお"); int main() { char a,b; cin>>a; cin>>b; cout<<catstring(a)<<endl; cout<<catstring(a,b)<<endl; return EXIT_SUCCESS; } char catstring(char x,char y) { char s; s=x+y; return(s); }

  • プログラムの動作の仕方

    この下のプログラムは、WRITE <ファイル名>をコマンド行で入力すると、動作するプログラムなのですが、この通りにWRITE <test>としてもできません。 やり方を教えてください. #include <iostream> #include <fstream> using namespace std; int main(int argc,char *argv[]) { if(argc!=2){ cout << "使い方:WRITE<ファイル名>" << endl; return 1; } ofstream out(argv[1]); //出力ファイル if(!out){ cout << "出力ファイルが開けません" << endl; return 1; } char str[80]; cout << "文字列をディスクに書き込み、$で停止します" << endl; do{ cout << ": "; cin >> str; out << str << endl; }while(*str!='$'); out.close(); return 0; } お願いします。

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • 質問です。。。

    いつもすみません。また質問させていただきます。 まずしたのプログラムを見てください・・・ #include <iostream> #include <string> using namespace std; int main() { string name; int tosi; cout << "こんにちは。私はコンピュータです。" <<endl; cout << "あなたの年齢を教えてください" <<endl; cin >> tosi; cout<<name<<"歳なんですか・・・老けてますね(笑)"<<endl; cout << "どこの学校ですか" <<endl; cin >> name; cout<<name<<"That's right!"<<endl; } このプログラムの8行目にあるint tosi;がありますよね。 この単語がなくても string name があったら12行目のプログラムができたのですが、どういうことなのでしょうか? 表現が一部変ですがよろしくお願いします。

専門家に質問してみよう