程序在完成后卡住

Program stuck after completion

本文关键字:程序      更新时间:2023-10-16

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

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

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

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