0

嗨,我已经编写了以下代码Turbo c++ compiler并尝试打印后缀和中缀,但它正在显示NULL pointer assignment. 我不明白为什么会这样。请帮我....

提前致谢。

#include<iostream.h>
#include<stdio.h>

void main()
{
     char *infix,*postfix;
     cout<<"Enter postfix exp:";
     gets(postfix);
     cout<<"Enter infix exp: ";
     gets(infix);
     cout<<endl<<endl;
     puts(postfix);
     puts(infix);
}
4

6 回答 6

7

获取更新的编译器。g++ 或 VC++ 都可以。

指针是一个相对困难的主题。在您正确理解它们的工作原理之前,我建议您将 C++ 的iostream工具与字符串一起使用,而不是 char 数组和 C 的stdio.

#include<iostream> // no .h for standard includes
#include <string> // std::string    

using namespace std; // to avoid typing std:: in front of everything

int main() // main was never void
{
     string postfix, infix;
     cout<<"Enter postfix exp:";
     cin >> postfix; // read into postfix
     cout<<"Enter infix exp: ";
     cin >> infix; // read into infix
     cout << endl << endl;
     cout << postfix << endl; // write postfix followed by a line feed
     cout << infix << endl; // write infix followed by a line feed
}

看看它是多么容易?现在您不必担心如何处理内存。

于 2011-04-20T17:57:37.437 回答
2
char *infix,*postfix;

这些是尚未分配内存的指针。

将它们声明为数组,这样您就不需要分配内存(一旦完成就释放它):

char infix[1024]; 
char postfix[1024];

或者更好的是,使用std::string等。std::cinstd::cout

于 2011-04-20T17:51:53.767 回答
-1

您必须使用内存初始化中缀和后缀。就像是:

char *infix,*postfix;
infix = new char[20];
postfix = new char[20];

您将初始化的大小将取决于您的要求。我刚刚选择了一个随机数作为 20。

于 2011-04-20T17:49:50.863 回答
-1

我同意评论。但要直接回答这个问题,中缀和后缀变量以 NULL 开头。您可以在堆栈或堆上分配它们。这是堆分配。在某些时候不再需要缓冲区时,您将需要调用 delete[]。

 char *infix,*postfix;
 infix = new char[50];
 postfix = new char[50];

 cout<<"Enter postfix exp:";
 gets(postfix);
 cout<<"Enter infix exp: ";
 gets(infix);
  cout<<endl<<endl;
 puts(postfix);
 puts(infix);
于 2011-04-20T17:51:08.273 回答
-1

就在我的脑海中,我会说它,因为您正在分配没有分配给它们的内存的指针。

尝试类似的东西:

 char infix[255],postfix[255]

或者做你所拥有的,但首先为指针分配一些内存:

 char* infix = new char[255];
 char* postfix = new char[255];
 free infix;
 free postfix;
于 2011-04-20T17:52:03.043 回答
-1

您还没有为 *infix 和 *postfix 分配任何内存。您所做的只是创建指向内存位置的指针。该程序不知道要分配多少内存。您必须给它们一个默认大小:char *infix = new char[256];或其他一些大小值。

于 2011-04-20T17:52:32.380 回答