字符串指针问题2(C++)

时间:2023-01-08 08:21:04
新问题来了 

1 为什么delete的时候会报错 

2 为什么cout < <getbuff < <endl; 会输出 “test” 
而不是cout < <*getbuff < <endl; 

3 如何声明和使用字符串指针。 给个标准代码吧,要求,就是字符串指针,转换字符数组和整形或short int 数组。谢谢,我尽快结贴尽快给分 

#include <iostream.h> 
void main() 

  char *getbuff=new char[]; 
  getbuff="test"; 
  for(int i=0;i <4;i++) 

cout < <getbuff < <endl; 

delete getbuff; 
}

11 个解决方案

#1



#include <iostream>
using namespace std;

void main() 

    char *getbuff = new char[32]; 
    strcpy(getbuff, "test");

    for(int i=0;i <4;i++) 
    { 
        cout<<getbuff[i]<<endl; 
    } 
    delete[] getbuff; 
}


#2


1 delete []getbuff;

#3


1.你虽然new出来一块内存,
但是后面又把指针指向的地址改变了。

这个时候指针指向的是“test”,这个内存不是new出来的,所以delete这个地方会出错。

2.cout 后面跟字符串指针的时候就是输出整个字符创

3.char * pChar = new char[100];

  char chars[100];
   memcpy(chars,pchar);
  delete pChar;


  转换为int,整数,或者short,一个一个赋值?

#4



#include <iostream>
using namespace std;

void main()
{
  char *getbuff=new char[100];
  //getbuff="test";
  strcpy(getbuff, "test");

  cout << getbuff << endl;

  delete getbuff;
}

#5


delete []pChar;

#6


char *getbuff=new char[10]; //要给出需要分配内存的大小
getbuff="test";//getbuff本身是指向刚动态分配的内存的,而这条语句是将它指向了字符常量"test",这里会造成内存泄露,那块动态分配的内存将不能再访问
//因为getbuff此时指向的并不是动态分配的内存,而它实际指向的是常量区,所以不能delete,只要看指针指向的内存空间是否是动态分配的内存空间来决定是否使用delete,另外new一个数组,delete时是用delete []指针名;

#7


getbuff =new char[] ;这句中括号里面应该填字符串的大小。
getbuff ="test" ; 这句有应该用strcpy(). 直接用“=”改变了getbuff指向的地址。用再用delete当然会报错。

#8


#include <iostream>
using namespace std;
void main() 

char *getbuff=new char; 
char a='m';
*getbuff=a;
for(int i=0;i <4;i++) 

cout <<*getbuff<<endl; 

delete getbuff; 
}

看到这两个cout的区别了吗,一个是指针指向字符串常量,一个是指针指向一个变量,是变量的时候要有*

#9


char *getbuff=new char[]; 有错.
字符串指针getbuff没有分配到内存空间

#10


学习一下!

#11



#include <iostream.h> 
void main() 

  char *getbuff=new char[]; //要分配内存空间;比如:new char[20]; 
  getbuff="test";  //你这是放在常量存储区,不正确,应该放在堆中,用strcpy(getbuff,"test");
  for(int i=0;i <4;i++) 

cout < <getbuff < <endl; 

delete getbuff;   //删除字符数组应该:delete []getbuff;
}

#1



#include <iostream>
using namespace std;

void main() 

    char *getbuff = new char[32]; 
    strcpy(getbuff, "test");

    for(int i=0;i <4;i++) 
    { 
        cout<<getbuff[i]<<endl; 
    } 
    delete[] getbuff; 
}


#2


1 delete []getbuff;

#3


1.你虽然new出来一块内存,
但是后面又把指针指向的地址改变了。

这个时候指针指向的是“test”,这个内存不是new出来的,所以delete这个地方会出错。

2.cout 后面跟字符串指针的时候就是输出整个字符创

3.char * pChar = new char[100];

  char chars[100];
   memcpy(chars,pchar);
  delete pChar;


  转换为int,整数,或者short,一个一个赋值?

#4



#include <iostream>
using namespace std;

void main()
{
  char *getbuff=new char[100];
  //getbuff="test";
  strcpy(getbuff, "test");

  cout << getbuff << endl;

  delete getbuff;
}

#5


delete []pChar;

#6


char *getbuff=new char[10]; //要给出需要分配内存的大小
getbuff="test";//getbuff本身是指向刚动态分配的内存的,而这条语句是将它指向了字符常量"test",这里会造成内存泄露,那块动态分配的内存将不能再访问
//因为getbuff此时指向的并不是动态分配的内存,而它实际指向的是常量区,所以不能delete,只要看指针指向的内存空间是否是动态分配的内存空间来决定是否使用delete,另外new一个数组,delete时是用delete []指针名;

#7


getbuff =new char[] ;这句中括号里面应该填字符串的大小。
getbuff ="test" ; 这句有应该用strcpy(). 直接用“=”改变了getbuff指向的地址。用再用delete当然会报错。

#8


#include <iostream>
using namespace std;
void main() 

char *getbuff=new char; 
char a='m';
*getbuff=a;
for(int i=0;i <4;i++) 

cout <<*getbuff<<endl; 

delete getbuff; 
}

看到这两个cout的区别了吗,一个是指针指向字符串常量,一个是指针指向一个变量,是变量的时候要有*

#9


char *getbuff=new char[]; 有错.
字符串指针getbuff没有分配到内存空间

#10


学习一下!

#11



#include <iostream.h> 
void main() 

  char *getbuff=new char[]; //要分配内存空间;比如:new char[20]; 
  getbuff="test";  //你这是放在常量存储区,不正确,应该放在堆中,用strcpy(getbuff,"test");
  for(int i=0;i <4;i++) 

cout < <getbuff < <endl; 

delete getbuff;   //删除字符数组应该:delete []getbuff;
}