为什么这个基本的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运行它没有任何问题?
答案 0 :(得分:4)
您没有为name
分配任何内存。
使用不指向您拥有的任何内存的指针的行为是未定义。
这就是为什么char name[20];
有效的原因。虽然gets
不安全,但您无法控制读取的字符数,因此您的字符缓冲区可能会溢出。为什么不使用std::string
,cin
和更新的编译器?