2017-01-11 3 views
-1

Warum bleibt dieses grundlegende C++ - Programm nach der Beendigung stecken, es wird nicht zurück zum Code in TurboC++. Es funktioniert jedoch gut für Wörter mit 1 und 3 Zeichen. Es läuft auch perfekt in CodeBlocks.Programm nach der Fertigstellung festgefahren

#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(); 
} 

Wenn ich char * zu char Namen zu ändern [20], es funktioniert perfekt. Kann mir bitte jemand den Grund dafür erklären. Wenn ihr Problem in char * ist, warum führt CodeBlocks es dann ohne Probleme aus?

+3

Warum verwenden Sie TurboC++? Das Ding ist mindestens 3 Jahrzehnte alt! Kein Wunder, dass es nicht richtig funktioniert, es wurde entwickelt, bevor C++ standardisiert wurde! Bitte verwende CodeBlocks mit gcc oder etwas anderem, aber ** nicht ** TurboC++. – Rakete1111

+0

Ich kenne Bruder, aber jemand kam mit diesem Zweifel zu mir und ich konnte es nicht herausfinden. –

+4

Die Variable 'name' ist ein Zeiger, aber wo zeigt es? Wenn Sie antworten können, wissen Sie, was falsch ist. –

Antwort

4

Sie haben keinen Speicher für name reserviert.

Das Verhalten bei der Verwendung eines Zeigers, der nicht auf Ihren eigenen Speicher verweist, ist undefined.

Deshalb funktioniert char name[20]; funktioniert. Obwohl gets unsicher ist, können Sie nicht steuern, wie viele Zeichen eingelesen werden, damit Ihr Zeichenpuffer überlaufen kann. Warum verwenden Sie nicht einen std::string, cin und einen aktuelleren Compiler?

+2

@ VaibhavVats Bitte behandeln Sie andere Benutzer mit Respekt. Auch danke, Kommentare werden dringend abgeraten. Lieber nur den konstruktiven Teil Deines Kommentars lassen –

+0

eigentlich beides;) Wenn ich besser bedroht werden soll, sei respektvoll :) Allerdings habe ich den Tippfehler schon vor deiner kommentierten –

+0

erkannt, ich bin neu im Stack Overflow, also lerne ich gerade über die Regeln hier. Entschuldigung für irgendeinen Fehler. –

Verwandte Themen