程序在完成后卡住

时间:2017-01-11 09:15:36

标签: c++ string turbo-c++

为什么这个基本的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运行它没有任何问题?

1 个答案:

答案 0 :(得分:4)

您没有为name分配任何内存。

使用不指向您拥有的任何内存的指针的行为是未定义

这就是为什么char name[20];有效的原因。虽然gets不安全,但您无法控制读取的字符数,因此您的字符缓冲区可能会溢出。为什么不使用std::stringcin和更新的编译器?