麻烦哪位高手看下我写的这个C++代码出什么问题了,运行每次都会意外终止

2025-02-27 15:45:36
推荐回答(3个)
回答1:

char* p_ar = new char[];
char* p_cr = new char[];
cout<<"请输入一个字符串";

首相,new一个数组要在中括号中说明数组的大小,具体原因不用多说,那都是库函数的问题,
不要深究,反正说明数组大小绝对不会错。其实当你学到一定程度,你可以轻易写出有类似功能的函数,所以不必深究库函数。

另外你的程序很不符合c++规范,strcpy(char* , char* )这是c库里面的,应#include

#include则是c++库里面的,应该strcpy()的参数是string类型(也可能有重载函数支持char*), 不是char *类型,

你把#include换成 #include, 或者 把两个char* 直接换为string ,再做些相应调整;

回答2:

不知道楼主的代码是刻意为之,还是无意的写成的。

楼主代码的问题在于以下两句。
char* p_ar = new char[];
char* p_cr = new char[];

在C++中可以用new分配一个动态的数组,语法是
TypeName* array_pointer=new TypeName[Size_Of_Array];

TypeName就是类型名,在楼主的代码中就是char,
array_pointer就是变量名,在楼主代码中就是p_ar和p_cr,
Size_Of_Array就是数组大小,在楼主代码中没有写,编译器就认为是0(这是我认为的,至少在vs2005中是这样的,至于G++等编译器就不知道了)。

在C++中,可以分配一个元素个数为0的数组。
语法就是
TypeName* array_pointer=new TypeName[0];
或者
TypeName* array_pointer=new TypeName[];

这个元素个数为0的数组,可以创建成功,但是不可以访问的。

楼主的代码的问题就是动态创建了一个元素个数为0的数组,然后又去使用它。

至于元素个数为0的数组有什么用,我也不知道。鬼才知道C++为什么会有这个稀奇古怪的东东。

在C++ Primer这本书中有关于元素个数为0的数组的描述,但是也没有说清楚,看了也等于没看。

http://www.9wy.net/onlinebook/CPlusPlusPrimer/ch04lev1sec3.html
http://book.chinaunix.net/special//ebook/addisonWesley/CPP_Primer_4th/0201721481/ch04lev1sec3.html

It Is Legal to Dynamically Allocate an Empty Array这一节

回答3:

你也不把错误信息发上来。。。个人认为开辟新的数组空间要加上具体的大小的,你把前两句指针指向的数组给个具体的大小试试。对C++不熟,不过如果指针开辟新的空间可以按照你那么写,那么也许strcpy那里会出错,这两个指针是同时开辟空间的,你又没有具体指出大小,有可能在strcpy的时候内存覆盖了。