2017-01-11 33 views
-1

この基本的なC++プログラムが完了後にスタックしないのはなぜですか?TurboC++のコードに戻りません。ただし、1文字と3文字の単語には問題ありません。また、CodeBlocksで完璧に動作します。完了後にプログラムが終了する

#include<conio.h> 
#include<stdio.h> 
#include<iostream.h> 
#include<string.h> 

void main() 
{ 
    clrscr(); 
    char * name; 
    cout<<"Enter your name : "; 
    gets(name); 
    int len = strlen(name); 
    for(int i=0;i<len;i++) 
    { 
     cout<<name[i]<<" "<<i<<endl; 
    } 
    getch(); 
} 

私は*へのchar名文字を変更する場合は、[20]、それが完璧に動作します。誰でもその理由を説明できますか? char *に問題がある場合、CodeBlocksが問題なく実行するのはなぜですか?

+3

なぜTurboC++を使用していますか?そのことは少なくとも30年前です! C++が標準化される前に、正しく動作しないのは不思議ではありません。 CodeBlocksをgccなどで使用してください。ただし** TurboC++ではありません。 – Rakete1111

+0

私は仲間を知っていますが、誰かがこの疑いで私に来て、私はそれを理解することができませんでした。 –

+4

変数 'name'はポインタですが、どこを指していますか?あなたがそれに答えることができたら、何が間違っているのかを知っている。 –

答えて

4

nameのメモリを割り当てていません。

自分が所有するメモリを指していないポインタを使用した場合の動作は、が定義されていません。です。

だから、char name[20];が機能します。 getsは安全ではありませんが、読み込まれる文字の数を制御できないため、文字バッファがオーバーランする可能性があります。 std::string,cinなどの最新のコンパイラを使用してみませんか?

+2

@VaibhavVats他のユーザーを尊敬してください。コメントしていただきありがとうございます。あなたのコメントの建設的な部分だけを残してください。実際には両方とも –

+0

を残してください;)もし私が敬意を表して脅かされるのなら:)あなたのコメント前に誤植に気付いた –

+0

私はオーバーフローをスタックするのが新しいので、ここでルール。ご迷惑をおかけして申し訳ありません。 –

関連する問題