C/C++--关于指针的一些开辟和赋值
今天写个代码,一直报错本来就是解个字符串的左旋问题,可是老报错,都快烦死了,后来在网上的到热心的网友的解答,豁然开朗!呵呵,,现在贴出来大家一起学习!
#include <iostream>
#include <cstring>
#include <malloc.h>
using namespace std;
int main()
{
char *str=(char *)malloc(20*sizeof(char)); //给指针开辟内存第一种方法
//char a[20]; //给指针开辟内存第二种方法
//str=a;
//str=new char[20]; //给指针开辟内存第三种方法
//str="wudemiao"; //给指针赋值第一种方法
strcpy(str,"wudemiao"); //给指针赋值第二种方法(注意区别)
cout<<strlen(str)<<endl;
cout<<str<<endl;
int N=strlen(str);
int M=4;
char ch;
while(M--){
ch=str[N-1];
for(int i=N-1;i>0;i--)
{
str[i]=str[i-1];
}
str[0]=ch;
}
cout<<str<<endl;
//delete str; //如果使用的第三种方法,千万别掉了
//掉了,就内存泄漏
return 0;
}
//需要解释一下的是,在我们为指针开辟内存时的上面说道
//的三种方法中,要注意的是记得使用delete str;避免内
//存泄漏。如果使用的是str="wudemiao";为这一句你把str
//指针指向一个字符串常量,上一句创建的那20个字符串现
//在已经访问不到了,这是内存泄露 很严重的问题。后面又
//通过str指针去修改它引用的常量的常量,常量肯定是不能
//修改的,所以就出错了。但是使用strcpy(str,"wudemiao");
//strcpy()则生成了一个副本,这个副本是一个数组,自然
//是变量,所以无论你用哪种方法给指针开辟内存,如果你
//使用的是str="wudemiao"的话,那么str指向的就是一个字
//符常量,无论在C/C++中都是不能改变常量的值的。
摘自 wudemiao的专栏
补充:软件开发 , C++ ,