程序完成后卡住
Program stuck after completion
为什么这个基本的 C++ 程序在完成后会卡住,它不会 returns 返回到 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* 更改为 char name[20],它将完美运行。谁能解释一下原因。
如果他们在 char * 中有问题,那么为什么 CodeBlocks 可以毫无问题地运行它?
您没有为 name
分配任何内存。
使用不指向您拥有的任何内存的指针的行为是未定义。
这就是 char name[20];
起作用的原因。尽管 gets
是不安全的,因为您无法控制读入的字符数,因此您的字符缓冲区可能会溢出。为什么不使用 std::string
、cin
和更新的编译器?
为什么这个基本的 C++ 程序在完成后会卡住,它不会 returns 返回到 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* 更改为 char name[20],它将完美运行。谁能解释一下原因。 如果他们在 char * 中有问题,那么为什么 CodeBlocks 可以毫无问题地运行它?
您没有为 name
分配任何内存。
使用不指向您拥有的任何内存的指针的行为是未定义。
这就是 char name[20];
起作用的原因。尽管 gets
是不安全的,因为您无法控制读入的字符数,因此您的字符缓冲区可能会溢出。为什么不使用 std::string
、cin
和更新的编译器?